listener - 多个 MQ 侦听器
问题描述
我有一个场景,我们的应用程序中有两个 MQ 侦听器。其中一个正在做一些额外的处理(数据库表更新),日队列 A 而另一个不是,比如说队列 B。问题是我们只有一个线程(这两个线程的主线程)并且消息被发送到A第一。因此,当代码到达它将处理/更新在 A 上接收到的消息的点时,B 上的消息到达,因此更新永远不会通过。即使 B 收到消息,如何确保 A 上的消息也能进行处理?
谢谢
解决方案
如果您必须使用一个线程来处理所有消息,您应该使用同步 api 调用,如下所示:
long timeoutForA, timeoutForB ...
MessageConsumer consumerA, consumerB ....
while (true) {
Message msgFromA = consumerA.receive(timeout);
if (msgFromA == null)
break;
... do something with message from A ...
}
while (true) {
Message msgFromB = consumerB.receive(timeout);
if (msgFromB == null)
break;
... do something with message from B ...
}
但是,我一般不会推荐这种业务逻辑方法。设计合理的消息系统应该能够异步处理不相关的消息。
推荐阅读
- powershell - 更改大型公用文件夹的文件夹权限的最佳方法?
- azure - 是否可以通过门户为 Logic App(标准)定义参数?
- flutter - 从 FlutterBlue BLE 扫描中删除缓存数据?
- sql - 如果没有针对外键 30 的薪水,此查询如何返回我 1100 值
- regex - 使用正则表达式替换 Notepad++ 中所有 JSON 值中的字符
- javascript - 我可以在 _app.js 和页面中使用 getInitialProps 吗?
- docker - 不同命名网络中的docker容器:curl:(7)无法连接到本地主机端口9080:连接被拒绝
- php - Laravel 8.x - 在 Blade 中检查 url 是否包含单词
- django - Django视图绕过渲染请求
- python - 套接字将带有烧瓶的网络摄像头视频流式传输到网页