zoukankan      html  css  js  c++  java
  • 采用rabbitMq消息推送方案

    采用rabbitMq消息推送方案

    总体导图

    生产者

    就是消息的生产者是需要发送推送消息的服务,

    1.需要发送推送消息的服务pom里面导入rabbitMq的jar包

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>

    2.添加配置类交给spring管理

    //rabbitMQ的配置交给spring管理
    @Configuration
    public class RabbitMQConfig {
       //这里列举可以被下面直接引用
    //定义邮件的队列名字
    public static final String QUEUE_NAME_EMAIL = "queue_name_email";
    //定义短信的队列名字
    public static final String QUEUE_NAME_SMS = "queue_name_SMS";
    //站内信队列
    public static final String QUEUE_NAME_SYSTEM_MESSAGE = "queue_name_system_message";
    //定义交换机
    public static final String EXCHANGE_NAME_TOPIC = "exchange_name_topic";


    //定义交换机
    @Bean(EXCHANGE_NAME_TOPIC)
    public Exchange exchangeNameTopic(){
    return ExchangeBuilder.topicExchange(EXCHANGE_NAME_TOPIC).durable(true).build();
    }

    //定义邮件的队列Bean
    @Bean(QUEUE_NAME_EMAIL)
    public Queue emailQueue(){
    return new Queue(QUEUE_NAME_EMAIL,true);
    }


    //定义短信的队列Bean
    @Bean(QUEUE_NAME_SMS)
    public Queue smsQueue(){
    return new Queue(QUEUE_NAME_SMS,true);
    }
    //定义系统消息的队列Bean
    @Bean(QUEUE_NAME_SYSTEM_MESSAGE)
    public Queue systemMessageQueue(){
    return new Queue(QUEUE_NAME_SYSTEM_MESSAGE,true);
    }

    //定义邮件的队列绑定到交换机
    @Bean
    public Binding smsQueueBinding(@Qualifier(QUEUE_NAME_SMS) Queue smsQueue,
    Exchange exchangeNameTopic){

    // #.sms.course
    return BindingBuilder.bind(smsQueue).to(exchangeNameTopic).with("message.sms").noargs();

    }
    //定义邮件的队列绑定到交换机
    @Bean
    public Binding emailQueueBinding(@Qualifier(QUEUE_NAME_EMAIL) Queue emailQueue,
    Exchange exchangeNameTopic){

    // #.email.course
    return BindingBuilder.bind(emailQueue).to(exchangeNameTopic).with("message.email").noargs();

    }
    @Bean
    public Binding systemMessageQueueBinding(
    @Qualifier(QUEUE_NAME_SYSTEM_MESSAGE) Queue systemMessageQueue,
    Exchange exchangeNameTopic){
    // #.systemmessage.course
    return BindingBuilder.bind(systemMessageQueue).to(exchangeNameTopic).with("message.system").noargs();

    }
    }


    2.在需要的业务处调用rabbitmq发送到指定列表

    需要使用的类

    @Autowired
    private RabbitTemplate rabbitTemplate;

    在需要产生消息的地方引用:

    ublishMsg(course);


    抽取的代码如下
    /*上线和下线操作都需要向消息队列发送消息,邮件,短信,程序内置提示来消费*/
    private void publishMsg(Course course){
    //创建交换机 创建队列
    //发送短信
    rabbitTemplate.convertAndSend( RabbitMQConfig.EXCHANGE_NAME_TOPIC,
    "message.sms",
    course.getName());
    //发送邮件
    rabbitTemplate.convertAndSend(
    RabbitMQConfig.EXCHANGE_NAME_TOPIC,
    "message.email",
    course.getName()
    );
    //发送站内信
    rabbitTemplate.convertAndSend(
    RabbitMQConfig.EXCHANGE_NAME_TOPIC,
    "message.system",
    course.getName()
    );
    }
  • 相关阅读:
    form表单回车提交
    Mac os x下配置nginx + php
    Mac下git命令自动补全
    关于javascript中的操作符&&和||的最终返回值
    ARM 裸机程序学习 01 点亮LED
    LINUX SHELL 中 2>&1 重定向的问题
    项目经理到底关心项目的什么?——有关外包项目成本的计算
    ARM 裸机程序学习 03 发送SOS信号(汇编 + C)
    ARM 裸机程序学习 02 按响BEEP
    备忘录 Linux及其内核杂项知识
  • 原文地址:https://www.cnblogs.com/china10/p/14626953.html
Copyright © 2011-2022 走看看