11、消息传递:连接生产者与消费者的纽带

消息传递:连接生产者与消费者的纽带

生产者与消费者间的挑战

在应用开发中,使用消息传递基础设施有一个显著优势,即让消息生产者和消费者的流程相互分离。但这有时也会给开发者带来挑战。

在典型的客户端同步请求 - 响应调用中,服务器可以在单线程中接受客户端连接,处理请求并返回响应。然而,连接和线程是稀缺资源,需要有效利用。若服务器端处理耗时较长,或者服务器线程因等待 I/O 操作等处于空闲阻塞状态,这种阻塞是不可取的。我们应设计一种方式,让接受连接的线程释放出来以接受更多连接,而处理和响应客户端的操作在后台由不同线程完成,且能在处理可继续或响应准备好时及时进行。

若只有一个服务器和一个客户端,实现起来很简单。但当众多客户端同时连接到服务器时,如果在服务器向客户端返回响应之前就释放接受套接字连接的线程,那么当响应准备好时,服务器就难以确定将响应发送给哪个客户端。

关联 ID 的作用

为解决上述问题,我们可以为每个请求创建回调队列,但这种方法效率较低。更好的办法是为每个客户端创建一个回调队列,但这又带来新问题:收到队列中的响应后,无法明确该响应对应同一客户端的哪个具体请求。这时就需要用到关联 ID(Correlation ID)。

我们可以为每个请求设置唯一的关联 ID 值。之后,当在回调队列中收到消息时,通过查看这个属性,就能将响应与请求匹配起来。

在设计处理多个客户端请求和响应的服务器时,发送 JMS 响应到队列之前,要确保将响应的 JMS 关联 ID 设置为请求的 JMS 关联 ID 值。可以使用 String getJMSCorrelationID() 方法获取消息的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值