gpt4 book ai didi

jms - 第一条路线将消息放入队列,第二条路线读取消息

转载 作者:行者123 更新时间:2023-12-02 22:36:56 25 4
gpt4 key购买 nike

我对 Camel 和 JMS 有疑问。

我的路线很简单:

  @Override
protected RouteBuilder[] createRouteBuilders() throws Exception {
createJmsComponent();

RouteBuilder route1 = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:startpoint")
.log("TO JMS: ${body}")
.to("jms://queue:QUEUE.NAME.OUT?replyTo=QUEUE.NAME.IN&replyToType=Exclusive")
;
}
};

RouteBuilder route2 = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("jms://queue:QUEUE.NAME.IN?receiveTimeout=10000")
.log("FROM JMS: ${body}")
;
}
};
return new RouteBuilder[]{route1, route2};
}

在日志中我有我需要的:

2012-07-04 16:28:10,443 INFO  route1 - TO JMS: message
2012-07-04 16:28:13,477 INFO route2 - FROM JMS: message

但问题是我有异常:

2012-07-04 16:28:33,960 ERROR o.a.c.p.DefaultErrorHandler                        - Failed delivery for (MessageId: ID-PLWROW912268-4634-1341412084839-0-1 on ExchangeId: ID-PLWROW912268-4634-1341412084839-0-2). Exhausted after delivery attempt: 1 caught: org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 20000 millis due reply message with correlationID: ID-PLWROW912268-4634-1341412084839-0-3 not received. Exchange[Message: message]
org.apache.camel.ExchangeTimedOutException: The OUT message was not received within: 20000 millis due reply message with correlationID: ID-PLWROW912268-4634-1341412084839-0-3 not received. Exchange[Message: message]
at org.apache.camel.component.jms.reply.ReplyManagerSupport.processReply(ReplyManagerSupport.java:126) ~[camel-jms-2.9.2.jar:2.9.2]
at org.apache.camel.component.jms.reply.TemporaryQueueReplyHandler.onTimeout(TemporaryQueueReplyHandler.java:61) [camel-jms-2.9.2.jar:2.9.2]
at org.apache.camel.component.jms.reply.CorrelationTimeoutMap.onEviction(CorrelationTimeoutMap.java:53) [camel-jms-2.9.2.jar:2.9.2]
at org.apache.camel.component.jms.reply.CorrelationTimeoutMap.onEviction(CorrelationTimeoutMap.java:30) [camel-jms-2.9.2.jar:2.9.2]
at org.apache.camel.support.DefaultTimeoutMap.purge(DefaultTimeoutMap.java:203) [camel-core-2.9.2.jar:2.9.2]
at org.apache.camel.support.DefaultTimeoutMap.run(DefaultTimeoutMap.java:159) [camel-core-2.9.2.jar:2.9.2]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [na:1.6.0_23]
at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) [na:1.6.0_23]
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [na:1.6.0_23]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) [na:1.6.0_23]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) [na:1.6.0_23]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) [na:1.6.0_23]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_23]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_23]
at java.lang.Thread.run(Thread.java:662) [na:1.6.0_23]

如果我没理解错的话,现在我有两条等待响应的路由。 Route2 从 Queue 读取响应,route1 没有得到响应(因为被 route2 读取),这就是我得到异常的原因。

那么我需要做些什么来获得这个场景:

route1 - only send message to JMS and not waiting for response. 
route2 - only read message from JMS.

最佳答案

解决方案是使用 inOnly 模式和 preserveMessageQos=true 标志。

.inOnly("jms://queue:QUEUE.NAME.OUT" +
"?replyTo=QUEUE.NAME.IN" +
"&replyToType=Shared" +
"&preserveMessageQos=true")

关于jms - 第一条路线将消息放入队列,第二条路线读取消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com