2023-分布式学习记录7-消息中间件
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/17182435.html
基于消息中间件的通信技术
面向消息中间件(MOM):提供分布式消息队列服务,使得节点之间可以实现基于消息的形式灵活的异步通信
异步的含义:
- 发送方可以在任意时刻发出消息,不必等待接收方上线,更不必等待消息发送成功再做下一步工作
- 接收方不必以阻塞方式等待消息的到来
两种通信模式:
- 消息队列通信模式,一个消息只可以被一个消费者接收
一个队列可以有多个生产者,也可以有多个消费者;消息队列中的消息一旦被某个消费者取走,该消息就从队列中删除
- 主题订阅通信模式,一个消息可以被多个订阅的消费者接收
支持向一个特定的消息主题发布消息
多个订阅同一主题的消费者可以同时接收发布到该消息主题的消息
三种接收方式:
- 阻塞接收,队列为空时阻塞,不为空时接收消息
- 轮询接收,轮询队列是否为空,不为空时接收消息
- 回调接收(通知接受),队列不为空时调用回调函数通知消费者接收
基于MOM实现通信的优点:
- 异步通信,可以减少系统响应时间,提高吞吐量
- 分布式节点之间的解耦
- 保证消息的可靠递交,实现最终一致性
- 实现广播、组播和多对多通信
- 流量削峰和流控
- 支持Push模型和Pull模型
ActiveMQ
这里介绍 ActiveMQ 作为实际例子深入理解 MOM
生产者:
- 建立 ConnectionFactory 对象,需要填入用户名、密码、连接地址(一般使用默认,如果没有修改的话)
- 通过 ConnectionFactory 对象创建一个 Connection ,并且调用 Connection 的 start 方法开启连接,Connection方法默认是关闭的
- 通过 Connection 对象创建 Session ,用于接收消息
- 通过 Session 对象创建 Destination 对象,指的是一个客户端用来制定生产消息目标和消费消息来源的对象
- 通过 Session 对象创建消息的发送和接收对象(生产者和消费者)
- 通过 MessageProducer 的 setDeliverMode 方法为其设置持久化或者非持久化特性
- 使用 JMS 规范的 TextMessage 形式创建数据(通过Session对象),并用 MessageProducer的 send 方法发送数据。客户端同理。记得关闭
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」