第17章 Spring消息

xiaoxiao2021-02-28  90

概述:

异步消息简介基于JMS的消息功能使用Spring和AMQP发送消息消息驱动的POJO

1、异步消息简介:

异步就是不需要立即关心调用返回结果,继续做其他事情

同步就是需要关心返回的结果,一直阻塞到有结果(超时)

模型为两种

点对点消息模型 : 有且仅有一个接受者

发布—订阅消息模型:类似关注名人微博,接受者就是粉丝

异步的优点:

无需等待、面向消息和解耦、位置独立

2、使用JMS发送消息

JMS只是定义一个规范,类似JDBC,具体实现不同厂商,这里的实现者就是ActiveMQ

如何做?

引入ActiveMQ命名空间

创建连接工厂  ActiveMQConnectionFactory 默认监听61616端口

声明ActiveMQ消息目的地   目的地可以是一个队列,也可以是一个主题,这取决于应用的需求。

2.1 使用Spring的JMS模板

JmsTemplate,优化Exception

发送消息

也有各种转换器:例如MappingJackson2MessageConverter、MarshallingMessageConverter

接受消息:使用JmsTemplate接收消息的最大缺点在于receive()和receiveAndConvert()方法都是同步的。

创建消息监听器;实现接口MessageListener

3、使用AMQP实现消息功能

实际上,AMQP具有多项JMS所不具备的优势。首先,AMQP为消息定义了线路层(wire-level protocol)的协议,而JMS所定义的是API规范。JMS的API协议能够确保所有的实现都能通过通用的API来使用,但是并不能保证某个JMS实现所发送的消息能够被另外不同的JMS实现所使用。而AMQP的线路层协议规范了消息的格式,消息在生产者和消费者间传送的时候会遵循这个格式。这样AMQP在互相协作方面就要优于JMS——它不仅能跨不同的AMQP实现,还能跨语言和平台。

3.1 AMQP简介:

通过Exchange来解耦

四种标准的AMQP Exchange

Direct:如果消息的routing key与binding的routing key直接匹配的话,消息将会路由到该队列上;Topic:如果消息的routing key与binding的routing key符合通配符匹配的话,消息将会路由到该队列上;Headers:如果消息参数表中的头信息和值都与bingding参数表中相匹配,消息将会路由到该队列上;Fanout:不管消息的routing key和参数表的头信息/值是什么,消息将会路由到所有队列上。

3.2配置Spring支持AMQP消息

实现者:RabbitMQ  默认监听端口5672

3.3、使用RabbitTemplate发送消息

convertAndSend() 和send() 

3.4 、接收AMQP消息

receive()方法 和receiveAndConvert()

3.5、监听类似MQ

转载请注明原文地址: https://www.6miu.com/read-70951.html

最新回复(0)