Spring消息之JMS与AMQP

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Megustas_JJC/article/details/82025146

异步消息是应用程序之间通用的交流方式。异步消息通信与同步RPC相比有几个优点。间接通信带来了应用之间的松散耦合,因此减轻了其中任意一个应用崩溃所带来的影响。此外,因为消息转发给了收件人,因为发送者不必等待响应,在很多情况下,可以提高应用的性能。

应用程序之间使用异步通信:JMS与AMQP

基于浏览器的客户端和服务器之间的异步通信:WebSocket

JMS消息模型

JMS中,有三个主要的参与者,消息的生产者、消息的消费者以及在生产者和消费者之间的传递消息的通道(队列或主题)。

在JMS中,通道有助于解耦消息的生产者和消费者,但是这两者依然会与通道相耦合。生产者会将消息发布到一个特定的队列或主题上,消费者从特定的队列或主题上接收到这些消息。通道具有双重责任,也就是传递数据以及确定这些消息该发送到什么地方,队列的话会使用点对点算法发送,主题的话就使用发布-订阅的方式。

AMQP

AMQP(Advanced Message Queuing Protocol)生产者不会直接将消息发布到队列中。AMQP在消息的生产者与消费者以及传递队列之间引入了一种间接的机制:Exchange。消息的生产者将信息发布到一个Exchange,Exchange会绑定到一个或多个队列上,它负责将信息路由到队列上,信息的消费者会从队列中提取数据并进行处理。根据Exchange的算法不同,它可能会使用消息的routing key和/或参数,并将其与Exchange和队列之间binding的routing key和参数进行对比。简单来说,生产者将信息发给Exchange并带有一个routing key(可以理解为Email的收件人地址,指定了预期的接收者,如将routing key设定为spittle.alert.queue,即消息发送到名为spittle.alert.queue的队列上),消费者从队列中获取消息。可以使用RabbitMQ进行声明队列,Exchange以及将它们结合在一起的binding。Spring AMQP的rabbit命名空间包含了很多个元素,用来创建队列,Exchange以及将它们结合在一起的binding。

无论是使用Spring JMS还是Spring AMQP,都首先需要配置一个连接工厂,连接工厂负责消息的发送与接收。发送端,连接工厂将对象封装为消息对象,发送至消息队列;接收端,对消息队列进行监听,当有消息到来时,对消息进行接收。

猜你喜欢

转载自blog.csdn.net/Megustas_JJC/article/details/82025146