下面是我的用例:我有两个端点:一个是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异步使用,但我没有找到任何处理用例的示例。我发现的唯一想法是,我必须创建一个独立的服务器来打开与客户端的套接字,并使它与两个端点进行通信。是否有任何方法来实现这种情况只使用骆驼?在这个问题上的任何帮助都是非常感谢的。
发布于 2017-11-09 21:16:37
您的代码将无法像用例那样运行。我还怀疑您试图使用Camel作为IP服务器框架,而不是在本例中使用集成。
让我们回顾一下Apache的生产者和消费者的概念。在集成世界中,我们将客户端和服务器称为消费者和生产者。这似乎是一种语言差异,直到您意识到消费者(通常是客户端)也可以是生产者(服务器)。
一些有用的定义:
1.生产者:生产者是能够创建并向端点发送信息的实体。一个典型的例子是像.to("file:data/outbox")这样的代码,因为这会产生一个文件。
2.消费者:消费者是一个接收生产者产生的信息的实体,它将这些消息包装在一个交换中,并将它们发送给处理。一个典型的例子是类似于from(jms:topic:xmlOrders)的代码
经验法则是,消费者通常是正在路由的消息的来源。
大笔记:
这两个定义不是单独设置的,生产者也可以是使用from的端点,而使用者也可以是使用to的端点。
因此,在你的情况下,让我们打破路线:
from("netty4:tcp://ipAddress:port?sync=true").to("wmq:queue:toQueue")在此路由中,您将创建一个Netty服务器,该服务器向队列发送消息。在这里,您的netty端点充当使用者(是的,它在from子句中),但是这会在您指定的IP地址和端点上创建一个Netty4服务器。然后,这将向另一个使用者发送一条消息,该客户端是再次充当使用者的MQ客户端。那两个消费者呢?制片人在哪里?连接到netty服务器的客户端将充当生产者。
让我们看一下路线的第二部分:
from("wmq:queue:fromQueue").to("netty4:tcp://ipAddress:port?sync=true")在这里,您要为MQ服务创建一个客户机/使用者,然后为netty服务器创建一个客户机/生产者。本质上,您是在这里创建一个新客户端,它连接到您在第一条路由中创建的服务器。
因此,简而言之,您的路由创建了一个Netty服务器,该服务器向MQ发送消息,然后创建一个MQ客户机,该客户端将消息发送给Netty客户机,后者连接到您创建的服务器。,它不会像这样工作。
继续阅读有关消息交换模式的内容,但我建议,如果您只是使用Netty和MQ,那么Camel可能有点过分,因为它是一个集成平台,而不是一个IP服务器平台。
https://stackoverflow.com/questions/47198601
复制相似问题