SpringBoot整合RabbitMQ,三種交換機(jī)類型示例
1、流程概括
2、引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
3、配置RabbitMQ連接
在application.properties或application.yml中配置RabbitMQ服務(wù)器的連接參數(shù):
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
4、不同交換機(jī)模式下的使用
4.1、DirectExchange(直連交換機(jī))
消費(fèi)者
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DirectConsumer {
//注冊(cè)一個(gè)隊(duì)列
@Bean //啟動(dòng)多次為什么不報(bào)錯(cuò)?啟動(dòng)的時(shí)候,它會(huì)根據(jù)這個(gè)名稱Direct_Q01先去查找有沒(méi)有這個(gè)隊(duì)列,如果有什么都不做,如果沒(méi)有創(chuàng)建一個(gè)新的
public Queue queue(){
return QueueBuilder.durable("Direct_Q01").maxLength(100).build();
}
//注冊(cè)交換機(jī)
@Bean
public DirectExchange exchange(){
//1.啟動(dòng)的時(shí)候,它會(huì)根據(jù)這個(gè)名稱Direct_E01先去查找有沒(méi)有這個(gè)交換機(jī),如果有什么都不做,如果沒(méi)有創(chuàng)建一個(gè)新的
return ExchangeBuilder.directExchange("Direct_E01").build();
}
//綁定交換機(jī)與隊(duì)列關(guān)系
@Bean
public Binding binding(Queue queue,DirectExchange exchange){
return BindingBuilder.bind(queue).to(exchange).with("RK01");
}
//啟動(dòng)一個(gè)消費(fèi)者
@RabbitListener(queues = "Direct_Q01")
public void receiveMessage(String msg){
System.out.println("收到消息:"+msg);
}
}
生產(chǎn)者
@Service
public class DirectProvider {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(Object message) {
rabbitTemplate.convertAndSend("Direct_E01", "RK01", message);
}
}
測(cè)試
@SpringBootTest
class TestApp {
@Autowired
private DirectProvider directProvider;
@Test
void test() throws IOException {
for(int i = 0; i < 10; i++){
directProvider.send("你好呀"+i);
System.out.println("發(fā)送成功"+i);
ThreadUtil.safeSleep(1000);
}
System.in.read();
}
}
一個(gè)交換機(jī)對(duì)多個(gè)隊(duì)列的特點(diǎn):
一個(gè)隊(duì)列對(duì)多個(gè)消費(fèi)者特點(diǎn):
4.2、FanoutExchange(扇形/廣播交換機(jī))
消費(fèi)者
/*
* Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
*
*/
package com.fpl.consumers;
import com.fpl.model.OrderingOk;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* <p>Project: spring-rabbitmq - FanoutConsumer</p>
* <p>Powered by fpl1116 On 2024-04-08 11:35:22</p>
* <p>描述:<p>
* @author penglei
* @version 1.0
* @since 1.8
*/
@Configuration
public class FanoutConsumer {
//注冊(cè)一個(gè)隊(duì)列
@Bean
public Queue fanoutQueue1(){
return QueueBuilder.durable("Fanout_Q01").build();
}
//注冊(cè)交換機(jī)
@Bean
public FanoutExchange fanoutExchange(){
//1.啟動(dòng)的時(shí)候,它會(huì)根據(jù)這個(gè)名稱Direct_E01先去查找有沒(méi)有這個(gè)交換機(jī),如果有什么都不做,如果沒(méi)有創(chuàng)建一個(gè)新的
return ExchangeBuilder.fanoutExchange("Fanout_E01").build();
}
@Bean //交換機(jī)與隊(duì)列關(guān)系
public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange){
return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
}
@RabbitListener(queues = "Fanout_Q01")
public void receiveMessage(OrderingOk msg){
System.out.println("FanoutConsumer1 消費(fèi)者1 收到消息:"+msg);
}
@RabbitListener(queues = "Fanout_Q01")
public void receiveMessage32(OrderingOk msg){
System.out.println("FanoutConsumer1 消費(fèi)者2 收到消息:"+msg);
}
}
生產(chǎn)者
@Service
public class FanoutProvider {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(Object message) {
rabbitTemplate.convertAndSend("Fanout_E01", "", message);
}
}
4.3、TopicExchange(主題交換機(jī))
消費(fèi)者文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-849330.html
/*
* Copyright (c) 2020, 2024, fpl1116.cn All rights reserved.
*
*/
package com.fpl.consumers;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
/**
* <p>Project: spring-rabbitmq - TopicConsumer</p>
* <p>Powered by fpl1116 On 2024-04-08 11:38:20</p>
* <p>描述:<p>
* @author penglei
* @version 1.0
* @since 1.8
*/
//@Configuration
public class TopicConsumer {
@Bean
public TopicExchange topicExchange(){
return ExchangeBuilder.topicExchange("Topic_E01").build();
}
@Bean
public Queue topicQueue1(){
return QueueBuilder.durable("小龍").build();
}
@Bean
public Queue topicQueue2(){
return QueueBuilder.durable("小虎").build();
}
@Bean
public Queue topicQueue3(){
return QueueBuilder.durable("小羊").build();
}
//注冊(cè)交換機(jī)
@Bean //交換機(jī)與隊(duì)列關(guān)系
public Binding TopicBinding1(Queue topicQueue1, TopicExchange topicExchange){
return BindingBuilder.bind(topicQueue1).to(topicExchange).with("#");
}
@Bean //交換機(jī)與隊(duì)列關(guān)系
public Binding TopicBinding2(Queue topicQueue2,TopicExchange topicExchange){
return BindingBuilder.bind(topicQueue2).to(topicExchange).with("1.6.*");
}
@Bean //交換機(jī)與隊(duì)列關(guān)系
public Binding TopicBinding3(Queue topicQueue3,TopicExchange topicExchange){
return BindingBuilder.bind(topicQueue3).to(topicExchange).with("1.8.*");
}
@RabbitListener(queues = "小龍")
public void receiveMessage(String msg){
System.out.println("小龍 收到消息:"+msg);
}
@RabbitListener(queues = "小虎")
public void receiveMessage2(String msg){
System.out.println("小虎 收到消息:"+msg);
}
@RabbitListener(queues = "小羊")
public void receiveMessage3(String msg){
System.out.println("小羊 收到消息:"+msg);
}
}
生產(chǎn)者文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-849330.html
@Service
public class TopicProvider {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(Girl girl) {
rabbitTemplate.convertAndSend("Topic_E01",girl.getHeight(), girl);
}
}
到了這里,關(guān)于SpringBoot整合RabbitMQ,三種交換機(jī)類型示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!