| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 交换机讲解,直连交换机,扇形交换机 -> 正文阅读 |
|
[Java知识库]交换机讲解,直连交换机,扇形交换机 |
一,交换机
路由键(Routingkey)
绑定键(Bindingkey)
二,交换机类型?直接交换机:Direct exchange
三,主题交换机:Topic exchange直接交换机的特点:
?主题交换机的特点: ?例题 扇形交换机:Fanout exchange
首部交换机:Headers?exchange?默认交换机:
?死信交换机 dead letter?exchange
?订单的超时处理交换机的属性?
①直连交换机(生产者Directconfig.java(生产者) package com.hmf.producer.mq; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.DirectExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @SuppressWarnings("all") public class Directconfig { //1.创建队列 @Bean public Queue directQueueA(){ return new Queue("directQueueA",true); } @Bean public Queue directQueueB(){ return new Queue("directQueueB",true); } @Bean public Queue directQueueC(){ return new Queue("directQueueC",true); } //2.创建交换机 @Bean public DirectExchange directExchange(){ return new DirectExchange("directExchange"); } //3.交换机和队列的绑定:设置banding @Bean public Binding bindingA(){ return BindingBuilder.bind(directQueueA()).to(directExchange()).with("a"); } @Bean public Binding bindingB(){ return BindingBuilder.bind(directQueueB()).to(directExchange()).with("b"); } @Bean public Binding bindingC(){ return BindingBuilder.bind(directQueueC()).to(directExchange()).with("c"); } } ProducerController.java package com.hmf.producer; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SuppressWarnings("all") public class ProducerController { @Autowired private RabbitTemplate template; @RequestMapping("/directSend") public String directSend(String routingKey){ template.convertAndSend("directExchange",routingKey,"Hello"); return "okok"; } } 结果 访问成功? ①直连交换机(消费者DirectReceiverC.java(消费者)
访问成功 ②主题交换机(生产者TopicConfig.java(生产者
ProducerController.java
访问成功 ? ②主题交换机(消费者TopicReceiverA.java(消费者 ?TopicReceiverA.java
访问成功 ③扇形交换机(生产者注:要绑定 不要键 Fanoutconfig.java package com.hmf.producer.mq; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @SuppressWarnings("all") public class Fanoutconfig { //1.创建队列 @Bean public Queue fanoutQueueA(){ return new Queue("fanoutQueueA",true); } @Bean public Queue fanoutQueueB(){ return new Queue("fanoutQueueB",true); } @Bean public Queue fanoutQueueC(){ return new Queue("fanoutQueueC",true); } //2.创建交换机 @Bean public FanoutExchange fanoutExchange(){ return new FanoutExchange("fanoutExchange"); } //3.交换机和队列的绑定:设置banding @Bean public Binding fanoutbindingA(){ return BindingBuilder.bind(fanoutQueueA()).to(fanoutExchange()); } @Bean public Binding fanoutbindingB(){ return BindingBuilder.bind(fanoutQueueB()).to(fanoutExchange()); } @Bean public Binding fanoutbindingC(){ return BindingBuilder.bind(fanoutQueueC()).to(fanoutExchange()); } } ProducerController.java package com.hmf.producer; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SuppressWarnings("all") public class ProducerController { @Autowired private RabbitTemplate template; @RequestMapping("/directSend") public String directSend(String routingKey){ template.convertAndSend("directExchange",routingKey,"Hello"); return "okok"; } @RequestMapping("/topicSend") public String topicSend(String routingKey){ template.convertAndSend("topicExchange",routingKey,"Hello"); return "okok"; } @RequestMapping("/fanoutSend") public String fanoutSend(){ //键写成了null 不然它直接进入到第二个参数 否则会报错 template.convertAndSend("fanoutExchange",null,"Hello"); return "okok"; } } 访问成功 ? ?③扇形交换机(消费者FanoutReceiverA.java package com.hmf.cunsumer.mq; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component //固定 跟着容器一起启动 @SuppressWarnings("/all") //消息队列的监听器 @RabbitListener(queues = "directQueueA") @Slf4j public class FanoutReceiverA { @RabbitHandler public void process(String message){ log.error("A接到"+message); } } 访问成功 可以增加数据进行多个绑定? ?访问一下 因为绑定了两个一个a和b? 使用两个都接收到了 如果要解绑 点击unbind就可以啦 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:08:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |