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()
    );
    }
  • 相关阅读:
    ie 火狐兼容集锦
    ie css png
    jQuery插件——autoTextarea-文本框根据输入内容自适应高度
    比onload更快获取图片尺寸(转载)
    数据库性能问题排查
    项目管理_FindBugs的使用
    js动态获取子复选项并设计全选及提交
    SVN使用_获取某版本后改动的文件列表
    存储过程_把字符串转化为结果集
    Spring下如何配置bean
  • 原文地址:https://www.cnblogs.com/china10/p/14626953.html
Copyright © 2011-2022 走看看