Sockets 如何使用camel netty4实现双向信道
以下是我的用例: 我有两个端点:一个是MQ,另一个是TCP/IP 我必须更换一台接受远程TCP/IP客户端查询的旧服务器。一旦套接字与客户端打开,数据就在双方进行交换。服务器通过TCP/IP异步发送MQ数据,并从客户端异步接收数据。必须确认发送的每个数据消息。这里的限制是我必须使用相同的套接字。 我创建了两条路线Sockets 如何使用camel netty4实现双向信道,sockets,apache-camel,Sockets,Apache Camel,以下是我的用例: 我有两个端点:一个是MQ,另一个是TCP/IP 我必须更换一台接受远程TCP/IP客户端查询的旧服务器。一旦套接字与客户端打开,数据就在双方进行交换。服务器通过TCP/IP异步发送MQ数据,并从客户端异步接收数据。必须确认发送的每个数据消息。这里的限制是我必须使用相同的套接字。 我创建了两条路线 from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue") from("wmq:queu
from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue")
from("wmq:queue:fromQueue").to("netty4:tcp://ipAddress:port?sync=true")
我启动第一个队列以接收来自客户端的会话打开请求,然后启动第二个路由以开始发送数据,但我不能使用相同的通道
我尝试获取第一个路由的远程端口,并在第二个路由中使用它,但我有一个ConnectException,因为netty4尝试打开一个已打开的新套接字
我发现netty4可以使用AsyncProcessor异步使用,但我没有找到任何处理我的用例的示例。
我发现的唯一想法是,我必须创建一个独立的服务器,它打开与客户端的套接字,并使其与两个端点通信。
有没有办法只使用camel来实现这种情况?
非常感谢您在这个主题上提供的任何帮助。您的代码将无法像您的用例那样运行。我还怀疑您试图将Camel用作IP服务器框架,而不是本例中的集成 让我们回顾一下ApacheCamel关于生产者和消费者的概念。在集成世界中,我们将客户机和服务器视为消费者和生产者。在您意识到消费者(通常是客户机)也可以是生产者(服务器)之前,这似乎是一种语言差异 一些有用的定义: 一,。生产者:生产者是能够创建消息并将其发送到端点的实体。典型的例子是像
.to(“file:data/outbox”)
这样的代码,因为这样会生成一个文件
二,。消费者:消费者是接收生产者生成的消息的实体,它将这些消息包装在一个交换中并发送给处理者。一个典型的例子是类似(jms:topic:xmlOrders)from的代码
经验法则是,消费者通常是路由消息的来源
大注释:
这两个定义不是一成不变的生产者也可以是使用from
的端点,消费者可以是使用to
的端点
因此,在你的情况下,让我们分开路线:
from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue")
from("wmq:queue:fromQueue").to("netty4:tcp://ipAddress:port?sync=true")
在此路由中,您将创建一个Netty服务器,向队列发送消息。在这里,您的netty端点充当消费者(是的,它位于from
子句中),但是这会在您指定的IP地址和端点处创建Netty4服务器。然后,这会将消息发送给另一个使用者,即再次充当使用者的MQ客户端。那么两个消费者呢?制片人在哪里?连接到netty服务器的客户端将充当生产者
让我们看一下路线的第二部分:
from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue")
from("wmq:queue:fromQueue").to("netty4:tcp://ipAddress:port?sync=true")
在这里,您将为MQ服务创建一个客户机/使用者,然后为netty服务器创建一个客户机/生产者。实际上,您在这里创建了一个新的客户端,它连接到您在第一条路由中创建的服务器
因此,简言之,您的路由将创建一个向MQ发送消息的Netty服务器,然后创建一个向Netty客户端发送消息的MQ客户端,该客户端连接到您创建的服务器它不会像这样工作。
继续阅读有关消息交换模式的内容,但我建议,如果您只是使用Netty和MQ,那么Camel可能有点过火,因为它是一个集成平台,而不是一个IP服务器平台