RabbitMQ java 运作时序图以及代码分析

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。RabbitMQ java 运作时序图以及代码分析,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在使用前还是要再说一下RabbitMQ的使用方式很别扭,所以最好使用有使用activeMQ的经验或者至少知道activeMQ是怎么用的。

 

activeMQ有两种队列方式:

p 2 p       :生产者生产—-》队列《——–消费者消费(通过队列名称去取)

provider  :生产者生产—-》广播《——–所有订阅的消费者都能拿到(发布订阅模式)

 

RabbitMQ复杂到天花板,所以花点时间:

 

生产者生产——-(vhost信道)()

 

vhost信道:这个简单理解为注册账户后必须绑定一个地址(高并发使用)

Exchange交换机:direct 、fanout 、topic、handers 四种,每一种定义不一样,这个去百度吧,这里不再说了。使用的时候我们还需要定义个名称。

Routing key路由键:生产者发送的消息都是通过这个键来找到对应的队列,假如没有这个队列,则消息扔掉。(很重要)

 

上面这个不友好理解的东西写完后我们开始进入正题:

2、Direct运作模式

direct :使用方式,direct交换机类型的MQ数据是直连的,因此路由键直接类型map<key,value>,加入value不存在,则发送至此key(路由键)找不到的队列,那么数据将不会存储。(这一点在基础理论上面有)。所以最好的是先穿件队列。或者直接启动customer端,因为customer里面必定有穿件队列的操作。

 

时序图:

RabbitMQ java 运作时序图以及代码分析

 

代码:今天主要使用的是RabbitMQ 的direct交换器,明天将上传 topic 使用以及代码:

GitHub地址:Maven工程

https://github.com/itliuxing/rabbitMQweb.git

 

3、topic 匹配模式

topic 匹配模式就比较简单了,直连交换器,生产者发送不同路由关键字的日志,消费者端通过绑定自己感兴趣的路由关键字来接收消息,进行完善日志系统。如果我想只接收生产者com.test.rabbitmq.topic包下的日志,其他包的忽略掉,之前的日志系统处理起来可能就非常麻烦,还好,我们有匹配模式,现在我们将生产者发送过来的消息按照包名来命名,那么消费者端就可以在匹配模式下使用【#.topic.*】这个路由关键字来获得感兴趣的消息。

 

简单总结,生产者生产一个消息:交换器创建类型:topic 路由键:com.email.info,生产者发完后,RabbitMQ 通过匹配 *.*的消费者什么的,然后发送给匹配成功的消费者。

 

匹配交换器

通过匹配交换器,我们可以配置更灵活的消息系统,你可以在匹配交换器模式下发送这样的路由关键字:

“a.b.c”、“c.d”、“quick.orange.rabbit”

不过一定要记住,路由关键字【routingKey】不能超过255个字节(bytes)

匹配交换器的匹配符

*(星号)表示一个单词

#(井号)表示零个或者多个单词

示例说明:

这一章的例子中,我们使用三个段式的路由关键字,有三个单词和两个点组成。第一个词是速度,第二个词是颜色,第三个是动物名称。

我们用三个关键字来绑定,Q1绑定关键字是【*.orange.*】,Q2绑定关键字是【*.*.rabbit】和【lazy.#】,然后分析会发生什么:

RabbitMQ java 运作时序图以及代码分析

Q1会收到所有orange这种颜色相关的消息

Q2会收到所有rabbit这个动物相关的消息和所有速度lazy的动物的消息

分析:

生产者发送“quick.orange.rabbit”的消息,两个队列都会收到

生产者发送“lazy.orange.elephant”,两队列也都会收到。

生产者发送”quick.orange.fox”,那么只有Q1会收到。

生产者发送”lazy.brown.fox”,那么只会有Q2能收到。

生产者发送”quick.brown.fox”,那么这条消息会被丢弃,谁也收不到。

生产者发送”quick.orange.male.rabbit”,这个消息也会被丢弃,谁也收不到。

生产者发送”lazy.orange.male.rabbit”,这个消息会被Q2的【lazy.#】规则匹配上,发送到Q2队列中。

 

 

看下面的流程图就很简单了,嗯灰常简单:

 RabbitMQ java 运作时序图以及代码分析

 新代码已更新至 GitHub:

4、fanout 广播模式

实在太简单了,fanout交换机的广播模式,是对全交换机内的队列发送消息。这样就能对全队列进行消息写入了

RabbitMQ java 运作时序图以及代码分析

代码更新至GitHub:Maven工程

https://github.com/itliuxing/rabbitMQweb.git

其实看完第一个队列的处理机制,我想后面的两个都很好理解了,就是那个交换机,路由键,队列  混在一起感觉莫名其妙。

本文档写到这里就写完了,随着完档的完结,我自己也收获到了rabbitmq的设计思路以及简单使用的方式方法,后面会结合一些真实的业务以及配合spring做一点代码操作.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/160955.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!