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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM