采用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()
);
}

 

posted @ 2021-04-07 11:25  接口interface  阅读(816)  评论(0编辑  收藏  举报