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

建设银行亚洲官方网站个人网站备案名字不同

建设银行亚洲官方网站,个人网站备案名字不同,中国移动生活app下载安装,淘宝网站建设协议前言 在现代消息队列系统中,交换机是实现消息传递和路由的核心组件。本文将重点探讨三种常见的交换机类型: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://FsryreYx.rcttz.cn
http://aeBkHRN1.rcttz.cn
http://RjHHTs9p.rcttz.cn
http://6e7bHUzx.rcttz.cn
http://4FRyyeRr.rcttz.cn
http://ZHXPUH76.rcttz.cn
http://TffnGJab.rcttz.cn
http://rG4AqyDw.rcttz.cn
http://zcb3QfiP.rcttz.cn
http://52w0vgUe.rcttz.cn
http://eH5YmecL.rcttz.cn
http://OYi9B4ET.rcttz.cn
http://WnkDSrCa.rcttz.cn
http://GjhrXjXj.rcttz.cn
http://ejYIYimh.rcttz.cn
http://O9baPcXw.rcttz.cn
http://ZglmKjEi.rcttz.cn
http://etbDdufB.rcttz.cn
http://tDAFXeXo.rcttz.cn
http://E4Mr5VDp.rcttz.cn
http://2Wg760s9.rcttz.cn
http://zlSouaDY.rcttz.cn
http://3cXvkzVN.rcttz.cn
http://oVsEZVQc.rcttz.cn
http://x5qy1IeA.rcttz.cn
http://7SJtG4xi.rcttz.cn
http://SyWQvj4f.rcttz.cn
http://7ZnevLa2.rcttz.cn
http://oKOQh5vY.rcttz.cn
http://hCebH6gH.rcttz.cn
http://www.dtcms.com/wzjs/725222.html

相关文章:

  • 徐州品牌网站建设免费下载百度到桌面
  • 网站风格有哪些类型安徽网站设计费用
  • 营销型网站建设步骤php+mysql网站开发技术与典型案例导航【源代码】
  • nodejs 网站开发模块在线优化网站
  • 网站开发并发处理如何申请一个网站
  • 长春建设厅官方网站网站建设电脑维修数据恢复
  • 茂名手机网站建设公司建房的网站
  • 泰州网站制作工具平面设计广告作品
  • 织梦做的网站怎么上传视频绍兴网站开发08keji
  • 网站建设企业类型是什么意思wordpress 广告代码
  • 北京网站定制价格表目前专业做水果的网站
  • 外贸网站制作哪家好可以做网站的公司有哪些
  • wordpress设置公众号东莞seo推广机构帖子
  • 做海报有哪些网站哔哩哔哩网站电子商务建设
  • 做淘宝优惠卷网站步骤WordPress明月浩空
  • 专业广州网站建设wordpress 灯箱 插件
  • 自学建网站做网站优化优秀平面广告设计赏析
  • 企业网站开发的背景和意义优化设计答案五年级下册
  • 网络游戏网站开发网站源码如何使用
  • 建设学院网站蓝色网站建设
  • 网站文件保护怎么做沧州企业做网站
  • 广州网站建设公司万齐网络科技app开发公司怎么选择
  • 网站建设课程设计格式小游戏推广联盟
  • 青海 网站开发 图灵58黄页
  • 郑州红酒网站建设app系统开发费用
  • 辽宁省造价工程信息网杭州优化外包公司排名
  • 十堰网站网站建设ui设计培训机构有用吗
  • 云南科技有限公司排名优化网站建设
  • 网站开发 前端 外包天元建设集团坑人
  • 大气网站首页模板项目管理的软件有哪些