如何在不等待端点路由被处理的情况下向端点发送消息(即,我的路由应该发送消息并完成)?骆驼:我怎样才能异步发送到端点
4
A
回答
1
wireTap(endpoint)
就是答案。
1
这可能取决于您正在使用的端点等,但一种常用的方法是将seda端点放在两者之间是一个选项。
from("foo:bar")
.bean(processingBean)
.to("seda:asyncProcess") // Async send
.bean(moreProcessingBean)
from("seda:asyncProcess")
.to("final:endpoint"); // could be some syncrhonous endpoint that takes time to send to. http://server/heavyProcessingService or what not.
seda端点的行为类似于先进先出的队列。如果您向seda端点派发多个事件的速度比路由可以完成处理速度快,则它们将堆叠并等待处理,这是一个很好的行为。
1
您可以在您的路由中仅使用inOnly,只发送消息到端点而不等待响应。欲了解更多详细信息,请参阅request reply documentation或event message documentation
from("direct:testInOnly").inOnly("mock:result");
1
可以使用ProducerTemplate的asyncSend()方法来发送消息INONLY到端点...
template.asyncSend("direct:myInOnlyEndpoint","myMessage");
4
使用wireTap或多播是你所追求的。无论指定什么ExchangePattern,直接:端点都将修改Exchange以进行下一步。您可以使用此测试失败,请参阅:
public class StackOverflowTest extends CamelTestSupport {
private static final String DIRECT_INPUT = "direct:input";
private static final String DIRECT_NO_RETURN = "direct:no.return";
private static final String MOCK_OUTPUT = "mock:output";
private static final String FIRST_STRING = "FIRST";
private static final String SECOND_STRING = "SECOND";
@NotNull
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from(DIRECT_INPUT)
.to(ExchangePattern.InOnly, DIRECT_NO_RETURN)
.to(MOCK_OUTPUT)
.end();
from(DIRECT_NO_RETURN)
.bean(new CreateNewString())
.end();
}
};
}
@Test
public void testShouldNotModifyMessage() throws JsonProcessingException, InterruptedException {
final MockEndpoint myMockEndpoint = getMockEndpoint(MOCK_OUTPUT);
myMockEndpoint.expectedBodiesReceived(FIRST_STRING);
template.sendBody(DIRECT_INPUT, FIRST_STRING);
assertMockEndpointsSatisfied();
}
public static class CreateNewString {
@NotNull
public String handle(@NotNull Object anObject) {
return SECOND_STRING;
}
}
}
现在,如果你改变了以上对窃听:
from(DIRECT_INPUT)
.wireTap(DIRECT_NO_RETURN)
.to(MOCK_OUTPUT)
.end();
,你会看到它按预期工作。您也可以使用多播:
from(DIRECT_INPUT)
.multicast()
.to(DIRECT_NO_RETURN)
.to(MOCK_OUTPUT)
.end();
相关问题
- 1. 骆驼发送到多个端点
- 2. 我怎样才能环路Apache的骆驼
- 3. 我怎样才能做一个异步任务同步
- 4. 我怎样才能纠正严重异常 - 异步任务
- 5. 我怎样才能发送我的消息使用websockets到后端
- 6. 春季启动,apache骆驼和hawtio:不能发送消息到端点
- 7. 我怎样才能得到
- 8. 骡3,我怎样才能发送出站端点响应到另一个端点
- 9. 我怎样才能从android发送文件数据到python?
- 10. 我怎样才能JavaScript对象发送到
- 11. 骆驼路线“到”具体websocket端点
- 12. 我怎样才能
- 13. 发送大文件到骆驼的多播端点时发生错误
- 14. 我怎样才能使用异步任务
- 15. 我怎样才能缩短这一点?
- 16. 我怎样才能存储点击QPushbuttons
- 17. 与骆驼异步消息处理
- 18. Apache的骆驼异步调用
- 19. 骆驼JMS异步请求回复
- 20. 可我能够动态地拦截端点骆驼
- 21. 我怎么能做到循环使用,而Apache的骆驼
- 22. Apache骆驼:如何分割文件并发送到多个端点
- 23. 我怎样才能同时分配许多驼鹿属性?
- 24. 我怎样才能驼峰启用Vim的搜索
- 25. 我怎样才能削减(1)驼峰的话?
- 26. Apache的骆驼:为什么我不能发送豆文字JMS
- 27. 我怎样才能发送与android的httppost阵列数组
- 28. 我怎样才能optimaly通过websocket发送图纸?
- 29. 我怎样才能发送价值动作脚本使用Javascript
- 30. 我怎样才能发送音频使用websocket微软翻译