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