RabbitMQ消息中间件

常规订单系统

使用消息中间件的订单系统

常规秒杀系统设计

消息中间件典型场景

1.异步处理

2.应用解耦

3.流量削锋

4.消息通讯 

RabbitMQ消息中间件介绍

Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。

RabbitMQ重点特性

1.灵活的路由(Flexible Routing)

在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

2.多语言客户端(Many Clients)

RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

3.管理界面(Management UI)

RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

4.插件机制(Plugin System) RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

RabbitMQ安装

安装docker(略)

拉取RabbitMQ镜像 :docker pull rabbitmq

启动RabbitMQ容器: docker run -i -t -d -p 5672:5672 -p 15672:15672 rabbitmq

启动RabbitMQ的web端插件 :docker exec -i -t 55 /bin/bash rabbitmq-plugins enable rabbitmq_management

RabbitMQ名词解释

1.Server(broker): 服务器,接受客户端连接,实现AMQP消息队列和路由功能的进程。 

2.Virtual Host:虚拟主机, 类似于权限控制组。

3.Connection:物理连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。

4.Channel:信道,仅仅创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令。

5.Exchange:路由,接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。

6.Message Queue:消息队列,用于存储还未被消费者消费的消息。

7.Binding:绑定关系,Binding联系了Exchange与Message Queue。

8.Message: 消息体,由Header和Body组成,Header是由生产者添加的各种属性的集合。而Body是真正需要传输的APP数据。

 RabbitMQ消息队列模式之简单模式:一个生产者P发送消息到队列Q,一个消费者C接收

RabbitMQ消息队列模式之工作模式:一个生产者,多个消费者,每个消费者获取到的消息唯一,多个消费者只有一个队列

RabbitMQ消息队列模式之发布/订阅模式

一个生产者发送的消息会被多个消费者获取。一个生产者、一个交换机、多个队列、多个消费者 生产者:可以将消息发送到队列或者是交换机。 消费者:只能从队列中获取消息。 如果消息发送到没有队列绑定的交换机上,那么消息将丢失。 交换机不能存储消息,消息存储在队列中

RabbitMQ消息队列模式之通配符模式

上面的路由模式是根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配。 符号“#”表示匹配一个或多个词,符号“*”表示匹配一个词。

RabbitMQ例子-pom文件

RabbitMQ例子-连接工厂

RabbitMQ例子-简单模式-生产者

RabbitMQ例子-简单模式-消费者

RabbitMQ例子-工作模式-生产者

RabbitMQ例子-工作模式-消费者

RabbitMQ例子-消息签收:

为了确保消息不会丢失,RabbitMQ支持消息签收。消费者发送一个消息签收,告诉RabbitMQ这个消息已经接收并且处理完毕了。RabbitMQ就可以删除它了。

如果一个消费者挂掉却没有发送签收,RabbitMQ会理解为这个消息没有处理完全,然后交给另一个消费者去重新处理。这样,你就可以确认即使消费者偶尔挂掉也不会丢失任何消息了。

自动签收: 不在乎消费者对消息处理是否成功,都会告诉队列删除消息。

手动签收: 消费者处理完业务逻辑,手动返回ack(通知)告诉队列处理完了,队列进而删除。

RabbitMQ流量销峰思路一 设置队列消息长度:

RabbitMQ有两种对队列长度的限制方式: 对队列中消息的条数进行限制  x-max-length 对队列中消息的总量进行限制  x-max-length-bytes 对消息总条数进行限制(总条数包括未被消费的消息+被消费但未被确认的消息):

RabbitMQ流量销峰思路二 扫描消息队列长度

RabbitMQ给我们提供了获取指定消息队列中剩余消息数的方法,我们可以通该方法对消息队列进行监控; channel.messageCount("tx_queue");

 

根据本人多年从业以及学习经验,录制了一套最新的Java精讲视频教程,如果你现在也在学习Java,在入门学习Java的过程当中缺乏系统的学习教程,你可以加群654631948领取下学习资料,面试题,开发工具等,群里有资深java老师做答疑,每天也会有基础部分及架构的直播课,也可以加我的微信renlliang2013做深入沟通,只要是真心想学习Java的人都欢迎。

java基础教程:https://ke.qq.com/course/149432?tuin=57912c43


Java分布式互联网架构/微服务/高性能/springboot/springcloud:

https://ke.qq.com/course/179440?tuin=57912c43

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

renlianggee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值