栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

springboot整合rabbitMq,java核心技术卷目录

springboot整合rabbitMq,java核心技术卷目录

public static final String TEST_QUEUE_TO_TOPIC2 = “topic.message2”;

public static final String TOPIC_EXCHANGE = “topic_exchange”;

public static final String TOPIC_EXCHANGE_ROUTING_KEY = “topic.#”;

}

一、普通消息:

1.创建普通队列:

@Bean

public Queue testQueue(){

return new Queue(RabbitConstant.TEST_QUEUE,true,false,false);

}

RabbitConstant.TEST_QUEUE:队列名称,字符串类型,自己命名

2.创建一个消息的生产者:

新建controller:

引入rabbitmq的操作工具类:

private RabbitTemplate rabbitTemplate;

private TXMessage txMessage;

@Autowired

public TestController(RabbitTemplate rabbitTemplate, TXMessage txMessage){

this.rabbitTemplate = rabbitTemplate;

this.txMessage = txMessage;

}

RabbitTemplate:操作rabbitmq的工具类。

TXMessage:确认消息所需要的,这里可以忽略。

发送消息:

@GetMapping(value = “sendTestQueue”)

pu

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

blic String sendTestQueue() {

rabbitTemplate.convertAndSend(RabbitConstant.TEST_QUEUE,“hello-bug”);

log.info(“发送参数为字符串的普通消息完成!”);

return “Success!!!”;

}

3.创建消费者:

@RabbitListener(queues = RabbitConstant.TEST_QUEUE)

public void testQueue(String content){

log.info(“已经接收到消息,参数:{}”,content);

}

@RabbitListener:此注解就是用于监听mq上是否有生产者生产消息。

queues:制定队列的名称。

到此,普通的消息就创建完成了

二、广播订阅消息

广播订阅消息分为三种:

1.direct:通过路由key将消息分发到绑定此交换机上的队列。

2.fanout:发送绑定到交换机上的所有队列。

3.topic:匹配模式,将消息分发到匹配规则的队列上。

第一种:direct:

新建两个普通的队列:

@Bean

public Queue testQueuebindDircet1(){

return new Queue(RabbitConstant.TEST_QUEUE_BIND_DIRECT1,true,false,false);

}

@Bean

public Queue testQueuebindDircet2(){

return new Queue(RabbitConstant.TEST_QUEUE_BIND_DIRECT2,true,false,false);

}

新建交换机:

@Bean

public DirectExchange directExchange() {

return new DirectExchange(RabbitConstant.EXCHANGE_DIRECT,true,false);

}

将队列通过路由绑定到交换机上:

@Bean

public Binding binding1() {

//链式写法: 用指定的路由键将队列绑定到交换机

return BindingBuilder.bind(testQueuebindDircet1()).to(directExchange()).with(RabbitConstant.DIRECT_EXCHANGE_ROUTING_KEY);

}

@Bean

public Binding binding2() {

//链式写法: 用指定的路由键将队列绑定到交换机

return BindingBuilder.bind(testQueuebindDircet2()).to(directExchange()).with(RabbitConstant.DIRECT_EXCHANGE_ROUTING_KEY);

}

现在来创建生产者和消费者:

生产者:

@GetMapping(value = “sendDirect”)

public String sendDirect() {

String content = “这是一条订阅消息(direct)”;

rabbitTemplate.convertAndSend(RabbitConstant.EXCHANGE_DIRECT,RabbitConstant.DIRECT_EXCHANGE_ROUTING_KEY,content);

log.info(“发送路由消息(direct)完成!”);

return “Success!!!”;

}

消费者:

@RabbitListener(queues = RabbitConstant.TEST_QUEUE_BIND_DIRECT1)

public void test1(String content){

log.info(“这里是订阅队列1,已经接收到消息,参数:{}”,content);

}

@RabbitListener(queues = RabbitConstant.TEST_QUEUE_BIND_DIRECT2)

public void test2(String content){

log.info(“这里是订阅队列2,已经接收到消息,参数:{}”,content);

}

第二种:Fanout

新建两个普通队列:

@Bean

public Queue testQueuetoFanout1(){

return new Queue(RabbitConstant.TEST_QUEUE_TO_FANOUT1,true,false,false);

}

@Bean

public Queue testQueuetoFanout2(){

return new Queue(RabbitConstant.TEST_QUEUE_TO_FANOUT2,true,false,false);

}

新建交换机:

@Bean

public FanoutExchange fanoutExchange() {

return new FanoutExchange(RabbitConstant.FANOUT_EXCHANGE,true,false);

}

将两个队列绑定到此交换机上,注意,不需要路由key:

@Bean

public Binding bindToFanout1() {

//链式写法: 用指定的路由键将队列绑定到交换机

return BindingBuilder.bind(testQueuetoFanout1()).to(fanoutExchange());

}

@Bean

public Binding bindToFanout2() {

//链式写法: 用指定的路由键将队列绑定到交换机

return BindingBuilder.bind(testQueuetoFanout2()).to(fanoutExchange());

}

生产者:

@GetMapping(value = “sendFanout”)

public String sendFanout() {

String content = “这是一条订阅消息(fanout)”;

rabbitTemplate.convertAndSend(RabbitConstant.FANOUT_EXCHANGE,"",content);

log.info(“发送路由消息(fanout)完成!”);

return “Success!!!”;

}

这里需要注意一点:

这里的路由key必须要制定为空字符串,如果不指定,消费者将收不到消息。

消费者:

@RabbitListener(queues = RabbitConstant.TEST_QUEUE_TO_FANOUT1)

public void test1(String content){

log.info(“这里是订阅队列1,已经接收到消息,参数:{}”,content);

}

@RabbitListener(queues = RabbitConstant.TEST_QUEUE_TO_FANOUT2)

public void test2(String content){

log.info(“这里是订阅队列2,已经接收到消息,参数:{}”,content);

}

好了,下面就是第三种:topic,根据规则匹配:

新建一个普通队列:

/**

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/671685.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号