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


在使用前还是要再说一下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 的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.#】,然后分析会发生什么:


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队列中。

 

 

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

 

 新代码已更新至 GitHub:

4、fanout 广播模式

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

代码更新至GitHub:Maven工程

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

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值