如何使用camel netty4

时间:2017-11-09 09:47:42

标签: sockets apache-camel

这是我的用例: 我有两个端点:一个使用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异步使用,但我没有找到任何处理我的用例的例子。 我发现的唯一想法是我必须创建一个独立的服务器,它与客户端打开套接字并使它与两个端点通信。 有没有办法只使用驼峰来实现这种情况? 对此主题的任何帮助都非常感激。

1 个答案:

答案 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服务器平台。