Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何使用camel netty4实现双向信道_Sockets_Apache Camel - Fatal编程技术网

Sockets 如何使用camel netty4实现双向信道

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

以下是我的用例: 我有两个端点:一个是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异步使用,但我没有找到任何处理我的用例的示例。 我发现的唯一想法是,我必须创建一个独立的服务器,它打开与客户端的套接字,并使其与两个端点通信。 有没有办法只使用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服务器平台