2021-10-12 消息中间件(RabbitMQ)

1、什么是消息中间件(MOM)?

这里解释的很好: 消息中间件的理解

	1)什么是中间件?
	非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件。

关注于数据的发送和接收,利用高效可靠的异步消息传递机制集成分布式系统

消息中间件一般有两种传递模式:点对点(P2P)和发布-订阅模式(Pub/Sub),JMS规范目前支持这两种

1)点对点(P2P)的特点
在这里插入图片描述

①生产者将消息发送至queue中,每个消息只有一个消费者,一旦被消费,消息就不在消息队列中了
②发送者和接受者之间在时间上没有依赖性,不管消费者有没有正常运行,都不会影响到发送者把消息发送至队列中
③接受者在成功接收消息之后需要向队列应答成功收到

1)发布订阅模式(Pub\Sub)的特点
在这里插入图片描述

①生产者将消息发送至topic中,每个消息可以有多个消费者消费,这点和P2P不同
②发布者发送到topic的消息,只有订阅了topic的消费者才会收到消息

小结:queue实现了负载均衡,一个消息只能被一个消费者消费,当没有消费者可用时,这个消息会被保存,知道有一个可用的消费者,一个队列可以有很多个消费者,但一个消息只有一个消费者。
topic实现了发布和订阅,当你发布了一个消息,所有订阅了这个topic的服务都会得到这个消息

2、消息中间件可以做什么?

将某一消息推送给各个需要的业务流程,我们采用消息中间件可以进行应用之间的解耦以及操作的异步,这是消息中间件最基础的两个特点,还有限流等作用

举个例子:像异步操作,我看网上都是说短信登录,也比较好理解。用户点击登录,然而后台需要调用短信服务、积分服务用于获取积分信息、日志服务用于记录登录日志等等,可能这还是比较少的;本来用户只是想要个登录,你给整半天多不给我个响应,万一某个服务卡住了,登录那位今天就这等着吧。

用了消息中间件之后,用户点击登录,直接给MOM发一个消息说我要登录了,MOM做两件事,先给你返回登录成功,然后异步给每个相关服务发一个信息,各个服务就做自己该做的事了

在这里插入图片描述
这就一目了然了吧

解耦作用,以用户下单购买业务为例,用户下单后,订单系统需要通知库存系统。传统的做法是,订单系统调用库存系统的接口

传统模式的缺点:
1)假如库存系统无法访问,则订单减库存将失败,从而导致订单失败。
2)订单系统与库存系统耦合

使用MOM后
1)订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
2)库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。

假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

上面这种事解耦的情况,其他常见的还有最终一致性、广播、错峰控制

这里有个概念:最终一致性、强一致性
最终一致性是指,我可以完成主要的部分功能,然后再去完成一些非主要的业务
强一致性是指要么同时完成、要么同时不完成

3、消息中间件有什么特点?

1、分布式:消息中间件要求分布式部署,满足大规模数据并发能力,同事要求可扩展
2、可靠性:可靠,数据一致性要求很高,要求避免数据丢失,提供持久化(数据库)
3、异步:借用消息中间件将消息处理从同步拆解为异步,提高系统性能
4、松耦合:消息发布者和订阅者全完解耦,两者互不知道对方的存在
5、通过消息队列,将消息拆分成若干个消息,同时能追溯到整个变化的过程

4、消息队列的概念

1、消息发布者只管发布消息,消息接收者只管接收消息
2、消息队列遵循先进先出
3、发布者不知道谁来取消息
4、接收者不知道谁发布的消息
举个例子:快递小哥只需要把你的快递放到指定的地点就行了,他不需要知道你是谁,你也不需要知道他是谁,他只管放,你只管取

5、消息中间件带来的好处

1、解耦系统
2、异步通知
3、安全可靠
4、顺序保证

6、JMS(Java Message Service)

在JMS之前,没家MOM厂商都有专门的API为别人提供对它的产品的访问,有很多种语言,其中就包括java,JMS就通过这些MOM产品为java开发者提供了一个发送、接收消息的方法,就把理解成一种标准规范吧(没怎么明白)

7、AMQP

提供统一消息服务的应用层标准高级消息队列协议(没怎么明白)

8、RabbitMQ

客户端与rabbitmq使用tcp连接,传递的消息(有效载荷、标签),是一种重量级的mq,是用erlang语言开发的,如果要安装就要先安装erlang

8、RabbitMQ与Kafka的区别

RabbitMQ效率没有Kafka高,但是数据是安全的;相比而言,Kafka效率较高,数据安全较低

9、RabbitMQ

1)、要使用rabbitmq要先安装erlang语言和rabbitmq服务端,而且二者的版本要一致,如果不一致会导致安装失败

因为需要下载服务端相关,没有demo;先学习官网:rabbit学习手册

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一种消息队列中间件,用于在应用程序之间传递消息。在实际操作中,我们可以使用RabbitMQ的消息应答机制来确保消息的可靠性。当消费者接收并处理完一条消息后,它可以发送一个消息应答给RabbitMQ,告诉它这个消息已经处理完毕了,然后RabbitMQ可以删除这条消息。这样可以确保消息不会丢失。 在选择消息队列中间件时,常见的选项包括RabbitMQKafka、RocketMQ和ActiveMQ。每个中间件都有其优点和适用场景。在使用RabbitMQ时,可以了解其原理并进行实操。 在RabbitMQ中,默认采用轮询分发消息的方式。这意味着RabbitMQ会轮流将消息分发给各个消费者,看起来很公平。然而,在某些场景下,轮询分发并不是最好的方式。我们可以根据具体的需求,调整RabbitMQ的分发策略,以达到更好的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [最经典的消息中间件RabbitMQ](https://blog.csdn.net/weixin_39570655/article/details/128109587)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [消息中间件 RabbitMQ 之 持久化操作](https://blog.csdn.net/qq_52567278/article/details/124235340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值