gpt4 book ai didi

sockets - 接收套接字请求,通过各种端点,并使用 camel 中的 netty 响应同一个套接字连接

转载 作者:可可西里 更新时间:2023-11-01 02:42:51 26 4
gpt4 key购买 nike

我目前在自定义 camel 组件中使用 netty 来监听套接字(使用带有 netty channel 处理程序的消费者),将消息从套接字传递到多个 camel 端点,并最终将最终结果写入平面文件。

这很好用,但显然仅限于“仅在”功能。

我想做的是,不是将最终结果写入平面文件,而是通过套接字将最终结果发送回请求者。

这样的东西是行不通的..伪代码:

<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 的服务器建立新连接,该连接不存在,因为它是套接字客户端。而不是神奇地使用我想要的消费者打开的 channel 。这只是设置正确的 uri 选项的问题还是不可能?

这是问题的高级描述。以下是关于我的假设的更多详细信息,以及如果以上内容不够清楚我想要的内容。

据我了解,camel-netty 有一个 NettyConsumer,它创建一个将监听套接字的套接字服务器。此外,它还有一个 NettyProducer,它创建一个将写入套接字的套接字客户端。

我的问题是:我可以将 NettyConsumer 和 NettyProducer 配置为使用相同的套接字/ channel 吗?我假设,为了使这成为可能,netty 管道/ channel /或连接的某些组件知识需要在端点级别共享,因为它对消费者和生产者都是通用的。

我已经阅读了有关同步请求-响应的文档,但我相信这仅适用于您有一个使用交换主体并通过交换将其发回的处理器的情况。

我不太好的临时解决方案:

所以我实际上得到了这个工作,但我并不喜欢它。这是我所做的:

  • 创建/扩展一个简单地阻塞/轮询目标文件的 SimpleChannelHandler
  • 将此处理程序添加为我在服务器管道中的最后一个处理程序
  • 一旦我的其他端点进程完成并创建了文件,轮询处理程序就会拉取文件的内容并将内容写入下游并关闭 channel 。
  • 响应最终返回到原始套接字客户端。

我用一个普通的套接字客户端测试了它并且可以工作。尽管这可行,但感觉有点像 hack,我更愿意配置一个 camel 生产者将响应发送回客户端。

在这一点上,我需要知道我是否可以做到这一点,或者我是否需要为自己编写一些更个性化的东西。唯一的要求是 Camel 和套接字 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>

随着content enricher您应该能够通过任意数量的端点路由交换,并让 Camel 通过您收到请求的套接字连接将交换主体发回。

关于sockets - 接收套接字请求,通过各种端点,并使用 camel 中的 netty 响应同一个套接字连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575483/

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