我对Spring集成中通道适配器和网关的差异感到困惑。正如@gary-russell在https://stackoverflow.com/a/29992267/467944中所述,通道适配器是非分布式的,而网关是双向的。如果是这种情况,为什么有amqp入站网关和amqp出站网关?
我最终要完成的是以下几点:
所以我想我需要一个网关,它有一个从控制器调用的接口,并将有效负载放入amqp队列(配置为其请求通道),同时它在其回复通道上侦听其答案。然而,在这种配置下,我总是以一个
MessageDeliveryException: Dispatcher has no subscribers for channel 'application.fromRabbit'
其中fromRabibbit是我的回复队列。
感谢gary russell提供的见解。我想我现在有了正确的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-amqp="http://www.springframework.org/schema/integration/amqp"
xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/integration/amqp http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 'CLIENT' SIDE CONFIG -->
<int:channel id="clientToRabbit" />
<int:channel id="clientFromRabbit" />
<int:gateway id="uppercaseGateway" service-interface="com.example.queuing.UpperCaseService" default-request-channel="clientToRabbit" />
<int-amqp:outbound-gateway request-channel="clientToRabbit" amqp-template="amqpTemplate" exchange-name="si.test.exchange" routing-key="si.test.binding" />
<!-- 'SERVER' SIDE CONFIG -->
<int:channel id="serverFromRabbit" />
<int:channel id="serverToRabbit" />
<int-amqp:inbound-gateway request-channel="serverFromRabbit" reply-channel="serverToRabbit" queue-names="si.test.queue" amqp-template="amqpTemplate" connection-factory="connectionFactory" />
<int:service-activator input-channel="serverFromRabbit" output-channel="serverToRabbit" ref="upperCaseService" method="toUpperCase" />
<!-- Infrastructure -->
<rabbit:connection-factory id="connectionFactory" host="localhost" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="si.test.queue" />
<rabbit:direct-exchange name="si.test.exchange">
<rabbit:bindings>
<rabbit:binding queue="si.test.queue" key="si.test.binding" />
</rabbit:bindings>
</rabbit:direct-exchange>
</beans>
当问这样的问题时,您应该始终显示配置。
调度员没有订户...
这是一个配置错误,您没有正确连接集成流。
Spring集成中有两种类型的网关-
与外部系统接口的网关
它们为外部系统提供请求/应答语义。
入站网关用于服务器端请求/应答,其中服务器接收请求、执行某些处理并返回应答。
出站网关是客户端的等价物,客户端发送请求并等待回复。使用AMQP,我们有一个异步版本,其中回复返回到另一个线程。
消息网关
这些基于接口的网关从Java代码(而不是某些外部系统)提供网关(通常是请求/应答,但具有无效结果的方法是单向的)。
这使得遗留的java代码能够使用基于集成的流。
所以你可能。。。
controller -> gateway -> transformer(optional) -> amqp-outbound-gateway
...这是一种常见的模式,效果很好。
服务器端可能是
amqp-inbound-gateway -> service-activator
显示您的代码/配置,有人可以帮助调试您的配置问题。
这里排着队 但我用 使用请求/响应体系结构。它确实工作得很好,因为它提供了动态路由,手动创建tcp客户端。
我正在开发一个Spring集成应用程序,我有一个地图列表,我需要将其插入到表格中。 我使用了jdbc: Outsport-网关或适配器将记录插入到表中。 但是如何使用jdbc:出站网关从我的地图列表中插入所有记录。
如何通过注释而不是常规配置文件配置入站通道适配器?我可以为会话工厂定义bean,如下所示: 如何配置通过注释下给出的入站通道适配器? 我正在寻找的是在应用程序启动时连接所有bean,然后公开一些方法来开始轮询服务器,处理它们,然后从本地删除它们,类似于 其中getPollableChannel()为我提供了用于轮询的bean。
问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更
我试图将从Quickfix读取消息(读取修复消息)配置到spring集成中。我知道我可以使用入站通道适配器从外部源(如QuickFix)读取数据。您能提供如何编写事件驱动入站通道适配器的示例吗?我有以下配置不起作用
使用Spring Integration Kafka,使用出站通道适配器,我尝试向名为“test”的主题发送消息 通过命令行终端,我启动了动物园管理员、kafka并创建了名为“test”的主题 Spring XML配置 JUnit测试代码 测试用例成功,在调试时,我发现channel.send()返回true 我使用下面的命令通过命令行检查了主题,但是我在测试主题中看不到任何消息。 bin/kaf