10-消息中间件(ActiveMQ、RabbitMQ)
1. 消息中间件
- 提供消息服务的应用程序
- 主要用于组件之间的解耦,消息的发送者服务知道消息使用者的存在,反之依然
2. 👍JMS
- Java Message Service
- Jms规定了ConnectionFactory、Connection、Session等接口/类
- JMS是一个Java标准,使用消息代理(message broker)的统一API
- JmsTemplate:Spring通过基于模板的抽象为JMS功能提供了支持
消息代理 broker:
3. ActiveMQ Artemis
- 支持协议
- JMS
- AMQP: Advanced Message Queueing Protocol
- MQTT: Message Queuing Telemetry Transport
- 支持Native内存模式和JVM内存模式
- Native可以绕过JVM,加快访问
- 消息持久化
3.1. 直接使用JMS接口发送与接受消息
- JMS规范:jakarta.jms-api-2.0.3.jar
- atemis客户端:artemis-jms-client-2.17.0.jar
- 与Spring无关
1 | ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL, USERNAME, PASSWORD); |
3.2. 👍关键概念
- Message:类似广播, 生产端
- Destination:队列或主题。消费端
- 三种指定方式:
- application.yml(default-destination)
- @Bean(Destination对象)
- 直接String指定
- 三种指定方式:
3.3. JmsTemplate
- JmsTemplate是Spring对JMS集成支持的核心
- 发送的两个方法:send、convertAndSend
3.4. 👍消息转换器 MessageConverter
MessageConverter是一个Spring的接口,实现各种序列化机制。
- SimpleMessageConverter:实现String与TextMessage的相互转换、字节数组与BytesMessage的相互转换、Map与MapMessage的相互转换,以及Serializable对象与ObjectMessage的相互转换
- MappingJackson2MessageConverter:使用Jackson 2 JSON库实现消息与JSON格式的相互转换
- typeId:目的是告诉对方是什么类型,以便于反序列化
- 字符串
- Message.setStringProperty,随属性集传输
- 消息转换器使用@Configuration定义成Bean
3.5. 接收模式
拉取和推送都需要消息转换器做反序列化。
3.5.1. 拉取模式 pull model
JmsTemplate支持
访问URL
3.5.2. 推送模式 push model
需要定义消息监听器
@JmsListener
4. RabbitMQ
实现AMQP协议。
RabbitMQ基础概念详细介绍:RabbitMQ基础概念详细介绍 - 割肉机 - 博客园
也需要消息转换器,虽然包路径不一样,但是功能一样。
4.1. 👍概念
- ConnectionFactory、Connection、Channel
- Exchange:
- Default、Direct、Topic、Fanout、Headers、Dead letter
- Queue
- Routing key:exchange根据routing key确定消息发往哪个队列
- JMS里没有这个概念
- Binding key
4.2. 使用
- 添加依赖
- 配置文件
- 需要到控制台创建exchange,queue,binding
1 | spring: |
生产放指定exchange、routing key
消费方只需关注队列名字
也有拉取模式和推送模式,也需要消息的转换
- 标题: 10-消息中间件(ActiveMQ、RabbitMQ)
- 作者: Charlie
- 创建于 : 2023-11-16 18:11:00
- 更新于 : 2024-07-05 12:55:04
- 链接: https://chillcharlie357.github.io/posts/b48e71af/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论