我当前在自定义骆驼组件中使用netty来监听套接字(使用带有netty通道处理程序的使用者),将消息从套接字传递到多个骆驼端点,并最终在平面文件中写出最终结果。
这可以正常工作,但显然仅限于“仅”功能。
我想做的是,而不是将最终结果写入平面文件,而是通过套接字将最终结果发送回请求者。
像这样的东西不起作用..伪代码:
<route>
<from:netty:tcp://localhost:1111/>
<to:endpoint1/>
</route>
<route>
<from:endpoint1 />
<to:netty:tcp://localhost:1111 />
</route>
我怀疑正在发生的事情是我对
<to:netty:tcp://localhost:1111 />
导致NettyProducer尝试在localhost:1111上建立与服务器的新连接,该服务器不存在,因为它是套接字客户端。而不是神奇地使用我希望它打开的消费者渠道。这仅仅是设置适当的uri选项的问题,还是不可能?
这是问题的高级描述。这是一些有关我的假设的更多详细信息,如果上述内容不够清楚,我会想要些什么。
据我了解,camel-netty有一个NettyConsumer,它创建一个套接字服务器,该服务器将监听套接字。另外,它还有一个NettyProducer,它创建一个套接字客户端,该客户端将写入套接字。
我的问题是:是否可以将NettyConsumer和NettyProducer配置为使用相同的套接字/通道?我假设为了使这种可能性成为可能,需要在端点级别上共享连接的网络管道/通道/或某些可了解的组件,因为这对消费者和生产者都是通用的。
我已经阅读了有关同步请求-响应的文档,但是我相信这仅适用于您拥有使用交换体并将其通过交换发回的单个处理器的情况。
我不太好的临时解决方案:
因此,我实际上已经完成了该工作,但是我不喜欢它。这是我所做的:
我使用普通套接字客户端对此进行了测试,并且可以正常工作。即使这行得通,但感觉上有点像骇客,我宁愿配置骆驼生产者将响应发送回客户端。
此时,我需要知道是否可以执行此操作,或者是否需要为自己编写更个性化的内容。唯一的要求是骆驼和套接字io,如果netty无法做到这一点,而其他方面可以做到,那也将有所帮助。
提前致谢。
我认为您想要的是这样的:
<camel:route id="rest.route.request.search">
<from:netty:tcp://localhost:1111/>
<!-- Send exchange off to another endpoint for enrichment/processing -->
<camel:enrich ref="some.endpoint.ref" />
<!-- Exchange body is sent back to caller -->
</camel:route>
使用内容丰富器,您应该能够通过任意数量的端点路由交换,并让Camel通过接收请求的套接字连接将交换主体发送回去。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句