当前位置: 首页 > wzjs >正文

免费下载建设银行官方网站下载佛山优化网站

免费下载建设银行官方网站下载,佛山优化网站,wordpress采集公众号图片,视频链接生成器在线制作前言 在现代消息队列系统中,交换机是实现消息传递和路由的核心组件。本文将重点探讨三种常见的交换机类型:Direct交换机、Topic交换机和声明队列交换机。通过对这三种交换机的详细分析,我们将学习它们的工作原理、应用场景以及如何在实际项目…

前言

在现代消息队列系统中,交换机是实现消息传递和路由的核心组件。本文将重点探讨三种常见的交换机类型:Direct交换机、Topic交换机和声明队列交换机。通过对这三种交换机的详细分析,我们将学习它们的工作原理、应用场景以及如何在实际项目中选择合适的交换机类型。无论你是刚接触消息队列的初学者,还是有一定经验的开发者,相信本篇博客能帮助你更深入地理解交换机的基本概念,并帮助你在使用消息中间件时做出更好的设计决策。


Direct交换机

Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由。

  • 每一个Queue都与Exchange设置一个BindingKey
  • 发布者发送消息时,指定消息的RoutingKey
  • Exchange将消息路由到BindingKey与消息RoutingKey一致的队列

在这里插入图片描述
利用SpringAMQP演示DirectExchange的使用
需求如下:

  1. 在RabbitMQ控制台中,声明队列direct.queue1和direct.queue2
  2. 在RabbitMO控制台中,声明交换机hmall.direct,将两个队列与其绑定
  3. 在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
  4. 在publisher中编写测试方法,利用不同的RoutingKey向hmall.direct发送消息

创建队列direct.queue1和direct.queue2
在这里插入图片描述
在这里插入图片描述
创建交换机hmall.direct
在这里插入图片描述
声明 routing key并绑定队列
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
消费者代码如下:

	@RabbitListener(queues = "direct.queue1")public void listenDirectQueue1(String message)throws Exception {log.info("消费者1监听到direct.queue2的消息,["+message+"]");}@RabbitListener(queues = "direct.queue2")public void listenDirectQueue2(String message)throws Exception {log.info("消费者2监听到direct.queue2的消息,["+message+"]");}

测试代码如下:

	@Testpublic void TestDirectQueue(){//1.交换机名String exchangeName = "hmall.direct";//2.消息String message = "Hello 红色!";//3.发送消息 rabbitTemplate.convertAndSend(exchangeName,"red", message);}

运行结果如下:
在这里插入图片描述
测试代码如下:

	@Testpublic void TestDirectQueue(){//1.交换机名String exchangeName = "hmall.direct";//2.消息String message = "Hello 蓝色!";//3.发送消息 rabbitTemplate.convertAndSend(exchangeName,"blue", message);}

运行结果如下:
在这里插入图片描述Direct交换机与Fanout交换机的差异:

  • Fanout交换机将消息路由给每一个与之绑定的队列
  • Direct交换机根据RoutingKey判断路由给哪个队列
  • 如果多个队列具有相同RoutingKey,则与Fanout功能类似

Topic交换机

TopicExchange也是基于RoutingKey做消息路由,但是routingKey通常是多个单词的组合,并且以,分割。
Queue与Exchange指定BindingKey时可以使用通配符:

  • #:代表0个或多个单词
  • *:代表一个单词

在这里插入图片描述
利用SpringAMQP演示DirectExchange的使用
需求如下:

  1. 在RabbitMQ控制台中,声明队列topic.queue1和topic.queue2
  2. 在RabbitMQ控制台中,声明交换机hmall.topic,将两个队列与其绑定
  3. 在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
  4. 在publisher中编写测试方法,利用不同的RoutingKey向hmall.topic发送消息

在这里插入图片描述
创建队列topic.queue1和topic.queue2
在这里插入图片描述
在这里插入图片描述
创建交换机hmall.topic
在这里插入图片描述
绑定队列关系
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
消费者代码如下:

	@RabbitListener(queues = "topic.queue1")public void listenTopicQueue1(String message)throws Exception {log.info("消费者1监听到topic.queue1的消息,["+message+"]");}@RabbitListener(queues = "topic.queue2")public void listenTopicQueue2(String message)throws Exception {log.info("消费者2监听到topic.queue2的消息,["+message+"]");}

测试代码如下:

	@Testpublic void TestTopicQueue(){//1.交换机名String exchangeName = "hmall.topic";//2.消息String message = "Hello 今日新闻!";//3.发送消息 参数分别是:交换机名称、RoutingKey(暂时为空)、消息rabbitTemplate.convertAndSend(exchangeName,"china.news", message);}

运行结果如下:
在这里插入图片描述
当routing key为china.weather,运行结果如下:
在这里插入图片描述
Topic交换机相比Direct交换机的差异:

  • Topic的RoutingKey和bindingKey可以是多个单词,以.分割
  • Topic交换机与队列绑定时的bindingKey可以指定通配符
  • #:代表0个或多个词
  • *:代表1个词

声明队列交换机

SpringAMQP提供了几个类,用来声明队列、交换机及其绑定关系:

  • Queue:用于声明队列,可以用工厂类QueueBuilder构建
  • Exchange:用于声明交换机,可以用工厂类ExchangeBuilder构建
  • Binding:用于声明队列和交换机的绑定关系,可以用工厂类BindingBuilder构建

在这里插入图片描述
例如,声明一个Fanout类型的交换机,并且创建队列与其绑定:

@Configuration
public class FanoutConfig{//声明FanoutExchange交换机@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("hmall.fanout");}//声明第1个队列@Beanpublic Queue fanoutQueuel(){return new Queue(fanout.queue1);}//绑 定队列1和交换机@Beanpublic Binding bindingQueuel(Queue fanoutQueuel, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueuel).to(fanoutExchange);}//...略,以相同方式声明第2个队列,并完成绑定中 
}
@Configuration
public class FanoutConfig{//声明FanoutExchange交换机@Beanpublic FanoutExchange fanoutExchange(){return ExchangeBuilder.fanoutExchange("hmall.fanout").build();}//声明第1个队列@Beanpublic Queue fanoutQueuel(){return QueueBuilder.durable("fanout.queue1").build();}

通常在消费者这一端声明队列和交换机

package com.itheima.consumer.config;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
public class FanoutConfiguration {@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("hmall.fanout");}@Beanpublic Queue fanoutQueue1(){return new Queue("fanout.queuue1");}@Beanpublic Binding fanoutQueue1binding( Queue fanoutQueue1, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);}@Beanpublic Queue fanoutQueue2(){return new Queue("fanout.queuue2");}@Beanpublic Binding fanoutQueue2binding( Queue fanoutQueue2, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);}
}

在这里插入图片描述


总结

通过本文的学习,我们深入了解了Direct交换机、Topic交换机和声明队列交换机的特点和使用场景。Direct交换机适用于点对点的消息传递,Topic交换机适合广播和发布/订阅模式,而声明队列交换机则在确保消息可靠性和一致性方面发挥重要作用。每种交换机都有其独特的优势和适用场景,掌握它们的应用将有助于我们在设计消息系统时做出更明智的选择。在实际项目中,了解这些基础概念将提升我们架构设计的能力,确保系统的高效性和稳定性。


文章转载自:

http://5lTzEyZP.hdbyn.cn
http://tRu9nG5i.hdbyn.cn
http://VlqXKgO8.hdbyn.cn
http://EppG9KJz.hdbyn.cn
http://byHCH1kM.hdbyn.cn
http://J3ICizjL.hdbyn.cn
http://02QwXHHM.hdbyn.cn
http://xNmvEevl.hdbyn.cn
http://cpZC8KpB.hdbyn.cn
http://6PmD1h8V.hdbyn.cn
http://gduwd2dn.hdbyn.cn
http://N9T4h3s5.hdbyn.cn
http://3CiSl7GE.hdbyn.cn
http://ynNjhIXn.hdbyn.cn
http://IFPfHgRQ.hdbyn.cn
http://Qee9B3Wu.hdbyn.cn
http://9MHcjRTS.hdbyn.cn
http://cNIboARP.hdbyn.cn
http://IeiLU4S8.hdbyn.cn
http://pPUpip89.hdbyn.cn
http://jfJgRE8h.hdbyn.cn
http://vBgtKsmc.hdbyn.cn
http://2ver5Nik.hdbyn.cn
http://zGSZkkr1.hdbyn.cn
http://mMjmtVsh.hdbyn.cn
http://7klE5IdR.hdbyn.cn
http://ZEwM696d.hdbyn.cn
http://p9vN5Tud.hdbyn.cn
http://Js73azE7.hdbyn.cn
http://uJhOEjyG.hdbyn.cn
http://www.dtcms.com/wzjs/756562.html

相关文章:

  • vps云主机可以做网站室内设计图片大全
  • 可以做游戏的网站有哪些内容班级网站怎么做
  • 提高网站的访问速度建设自己的网站首页
  • 保险网站有哪些平台梅州市住房和城乡建设局网站
  • 图片网站该如何做seo优化软件开发培训教程
  • 龙岗网站建设代理商wordpress表格编辑器
  • 衡水建设网站公司学网站开发要下载哪些软件
  • 北京做电商网站设计罗湖网站建设设计
  • 网站制作哪家做的好膜结构网站推广怎么做
  • 网站上动态图片怎么做企业网站建设中存在的主要问题会有哪些?
  • pa66用途障车做网站网站建设 英文
  • 网站添加地图导航申请一个网站空间
  • 建设网站是否等于开展网络营销百度实名认证
  • 08系统iis信息管理器怎么建设网站外贸培训
  • iis 网站 优化郑州不孕不育
  • 阜宁网站建设公司一站式采购平台官网
  • 做原型的网站毕业设计网站开发流程图
  • 北京手机网站搭建多少钱无锡自助建站网站
  • 网站改版提交给百度dedecms婚纱摄影网站模板
  • 效果好的网站制作公司网页改版方案
  • 苏州网站建设空间付费查看下载wordpress虚拟资源
  • 保安公司的网站设计比较好的wordpress编辑增强
  • 内网网站搭建教程基于oa系统的网站建设
  • 个人网站软件wordpress post data
  • 成都市建设部官方网站建设网站困难的解决办法
  • 手机网站建设的行情电商网站设计说明书
  • 有没有做美食的小视频网站做网站都需要哪些知识
  • 网站开发成本预算什么推广方式能快速引流
  • 美丽寮步网站建设北京百度网讯科技有限公司
  • 商务网站规划与建设课程设计开发网站公司的简介