如何使用 spring java 应用程序使 IBM MQ 侦听器进程变慢
How to make IBM MQ listener process slowly using spring java application
我们正在尝试将遗留系统迁移到微服务
在 PaaS 环境中,我们有调度程序作业来触发消息并将消息一一放入 MQ 中,我们在微服务中有 MQ 侦听器来获取消息并创建请求并将请求发送到外部方。
问题来了,我们的微服务能够对外部服务进行异步调用,但是我们的外部服务无法处理异步调用,所以它返回了错误的数据。
例如,我们正在以每分钟 40 到 60 个请求访问外部服务,而外部服务每分钟只能处理 6 个请求。
那么怎么才能让MQ监听器处理的慢呢
我试过将 setMaxConcurrenceConsumer
减少到 1 并且
使用 observable.toblocking.single()
使进程仅在一个线程中达到 运行。
我们在微服务中使用 RxJava。
听起来您的微服务或外部服务未遵循 Request-Reply 消息传递的用例。
(1) 外部服务是否将 Reply 消息的关联 ID 设置为 Request 消息的 Message ID?
(2) 您的微服务是否正在执行 MQGET,匹配选项是通过 Correlation ID 获取。
您可以将错误归咎于外部服务,但如果您的微服务实际上接收到了错误的消息,那么这是您的应用程序的错。即,您的微服务是否只是在队列中获取 "next" 消息?
阅读这个答案:How to match MQ Server reply messages to the correct request
这里有一个解释(看起来像是 90 年代的,但有很好的信息):https://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReplyJmsExample.html
从长远来看,我们还计划将外部服务迁移到。
在短时间内,我使用 observable.toblocking.single()、thread.sleep() 和 setMaxConcurrenceConsumer() 将其修复为 1,因此一次只有一个线程 运行。这将避免异步调用外部 service.The 睡眠时间将通过对外部服务进行一些分析来动态设置。
我们正在尝试将遗留系统迁移到微服务 在 PaaS 环境中,我们有调度程序作业来触发消息并将消息一一放入 MQ 中,我们在微服务中有 MQ 侦听器来获取消息并创建请求并将请求发送到外部方。
问题来了,我们的微服务能够对外部服务进行异步调用,但是我们的外部服务无法处理异步调用,所以它返回了错误的数据。 例如,我们正在以每分钟 40 到 60 个请求访问外部服务,而外部服务每分钟只能处理 6 个请求。
那么怎么才能让MQ监听器处理的慢呢
我试过将 setMaxConcurrenceConsumer
减少到 1 并且
使用 observable.toblocking.single()
使进程仅在一个线程中达到 运行。
我们在微服务中使用 RxJava。
听起来您的微服务或外部服务未遵循 Request-Reply 消息传递的用例。
(1) 外部服务是否将 Reply 消息的关联 ID 设置为 Request 消息的 Message ID?
(2) 您的微服务是否正在执行 MQGET,匹配选项是通过 Correlation ID 获取。
您可以将错误归咎于外部服务,但如果您的微服务实际上接收到了错误的消息,那么这是您的应用程序的错。即,您的微服务是否只是在队列中获取 "next" 消息?
阅读这个答案:How to match MQ Server reply messages to the correct request
这里有一个解释(看起来像是 90 年代的,但有很好的信息):https://www.enterpriseintegrationpatterns.com/patterns/messaging/RequestReplyJmsExample.html
从长远来看,我们还计划将外部服务迁移到。
在短时间内,我使用 observable.toblocking.single()、thread.sleep() 和 setMaxConcurrenceConsumer() 将其修复为 1,因此一次只有一个线程 运行。这将避免异步调用外部 service.The 睡眠时间将通过对外部服务进行一些分析来动态设置。