2023-分布式学习记录7-消息中间件

基于消息中间件的通信技术

面向消息中间件(MOM):提供分布式消息队列服务,使得节点之间可以实现基于消息的形式灵活的异步通信

异步的含义:

  • 发送方可以在任意时刻发出消息,不必等待接收方上线,更不必等待消息发送成功再做下一步工作
  • 接收方不必以阻塞方式等待消息的到来

两种通信模式:

  • 消息队列通信模式,一个消息只可以被一个消费者接收

一个队列可以有多个生产者,也可以有多个消费者;消息队列中的消息一旦被某个消费者取走,该消息就从队列中删除

  • 主题订阅通信模式,一个消息可以被多个订阅的消费者接收

支持向一个特定的消息主题发布消息

多个订阅同一主题的消费者可以同时接收发布到该消息主题的消息

三种接收方式:

  • 阻塞接收,队列为空时阻塞,不为空时接收消息
  • 轮询接收,轮询队列是否为空,不为空时接收消息
  • 回调接收(通知接受),队列不为空时调用回调函数通知消费者接收

基于MOM实现通信的优点:

  • 异步通信,可以减少系统响应时间,提高吞吐量
  • 分布式节点之间的解耦
  • 保证消息的可靠递交,实现最终一致性
  • 实现广播、组播和多对多通信
  • 流量削峰和流控
  • 支持Push模型和Pull模型

 

ActiveMQ

这里介绍 ActiveMQ 作为实际例子深入理解 MOM

生产者:

  1. 建立 ConnectionFactory 对象,需要填入用户名、密码、连接地址(一般使用默认,如果没有修改的话)
  2. 通过 ConnectionFactory 对象创建一个 Connection ,并且调用 Connection 的 start 方法开启连接,Connection方法默认是关闭的
  3. 通过 Connection 对象创建 Session ,用于接收消息
  4. 通过 Session 对象创建 Destination 对象,指的是一个客户端用来制定生产消息目标和消费消息来源的对象
  5. 通过 Session 对象创建消息的发送和接收对象(生产者和消费者)
  6. 通过 MessageProducer 的 setDeliverMode 方法为其设置持久化或者非持久化特性
  7. 使用 JMS 规范的 TextMessage 形式创建数据(通过Session对象),并用 MessageProducer的 send 方法发送数据。客户端同理。记得关闭
posted @ 2023-03-06 01:52  kuaiquxie  阅读(12)  评论(0编辑  收藏  举报