这是我的用例: 我有两个端点:一个使用MQ,第二个使用TCP / IP 我必须替换接受来自远程TCP / IP客户端的查询的旧服务器。一旦套接字与客户端一起打开,数据就会在双方交换。服务器通过TCP / IP异步发送MQ数据,并异步接收来自客户端的数据。发送的每条数据消息都必须得到确认。这里的约束是我必须使用相同的套接字。 我创建了两条路线
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异步使用,但我没有找到任何处理我的用例的例子。 我发现的唯一想法是我必须创建一个独立的服务器,它与客户端打开套接字并使它与两个端点通信。 有没有办法只使用驼峰来实现这种情况? 对此主题的任何帮助都非常感激。
答案 0 :(得分:0)
您的代码无法像您的用例一样运行。我还怀疑你正在尝试使用Camel作为IP服务器框架,而不是在这种情况下集成。
让我们回顾一下Apache Camel的生产者和消费者概念。在集成领域,我们将客户端和服务器视为消费者和生产者。这可能看起来像语言差异,直到您意识到消费者(通常是客户端)也可以是生产者(服务器)。
一些有用的定义:
1。生产者:生产者是能够创建消息并将消息发送到端点的实体。典型的例子是像.to("file:data/outbox")
这样的代码,因为这会生成一个文件。
2。消费者:消费者是接收生产者生成的消息的实体,它将这些消息包装在交换中并发送它们进行处理。一个典型的例子是像from(jms:topic:xmlOrders)
根据经验,通常消费者是被路由的消息的来源。
BIG注意:
这两个定义不是一成不变的,生产者也可以是使用 from
的端点,而消费者可以是使用 {{的端点1}}。
所以在你的情况下,让我们打破这条路线:
to
在此路由中,您将创建一个将消息发送到队列的Netty服务器。在这里,您的netty端点充当使用者(是的,它在from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue")
子句中)但是这会在您指定的IP地址和端点处创建Netty4服务器。然后,它将消息发送给另一个消费者,该消费者是再次充当消费者的MQ客户端。两位消费者呢?制片人在哪里?连接到netty服务器的客户端将充当生产者。
让我们看一下路线的第二部分:
from
在这里,您要为MQ服务创建客户端/使用者,然后为netty服务器创建客户端/生产者。基本上,您在此处创建一个新客户端,该客户端连接到您在第一个路径中创建的SERVER。
因此,简而言之,您的路由创建一个Netty服务器,该服务器向MQ发送消息,然后创建一个MQ客户端,该客户端将消息发送到连接到您创建的服务器的Netty客户端。 它不会像这样工作。
阅读有关消息交换模式的内容以供进一步阅读,但我建议如果你只是使用Netty和MQ,那么Camel可能有点矫枉过正,因为它是一个集成平台而不是IP服务器平台。