Spring integration MQTT应该使用哪个Spring集成通道

Spring integration MQTT应该使用哪个Spring集成通道,spring-integration,mqtt,Spring Integration,Mqtt,我正在尝试一个演示应用程序,我们通过UI发送命令,然后通过spring集成将命令传递到设备,并将命令状态返回UI。这是我第一次使用spring集成,我对各种通道的实现有点不确定。MQTT不提供P2P直接通信,因此在我的流、PublishSubscribe或direct中,我应该为入站和出站适配器使用哪个通道?我认为您需要知道的不仅仅是“我应该使用哪个通道类型?” 如果您的意思是希望向设备发送命令并等待回复,然后将该回复发送到浏览器,则需要将基本上异步的协议转换为同步请求/回复场景 您可能需要挂起

我正在尝试一个演示应用程序,我们通过UI发送命令,然后通过spring集成将命令传递到设备,并将命令状态返回UI。这是我第一次使用spring集成,我对各种通道的实现有点不确定。MQTT不提供P2P直接通信,因此在我的流、PublishSubscribe或direct中,我应该为入站和出站适配器使用哪个通道?

我认为您需要知道的不仅仅是“我应该使用哪个通道类型?”

如果您的意思是希望向设备发送命令并等待回复,然后将该回复发送到浏览器,则需要将基本上异步的协议转换为同步请求/回复场景

您可能需要挂起http请求线程,直到接收到来自设备的异步应答,将应答与请求关联,并在将应答移交给请求线程后释放请求线程

您只需在
@Controller
中执行关联,并将回复发送到控制器中的其他方法,在那里执行关联,然后释放http线程

<int-mqtt:inbound-channel-adapter channel="results" .../>
<int:channel id="results" />
<int:service-activator ref="myController" 
    method="someMethodToReceiveTheReplyAndCorrelateToRequest" />

对于类似的用例有一种技术;我们将使这些场景更易于实现

在任何情况下,您都可以使用
DirectChannel
s来连接组件


如果我完全误解了你的问题,请澄清。

谢谢!Gary,这并没有回答我想要的问题,但确实回答了一个与设计相关的问题,我正在浏览您的spring集成示例:-)。我的问题是,如果MQTT基本上是一个发布/订阅协议,那么使用DirectChannel会有意义吗?如果我使用
,我假设它是默认的如果我使用PublishSubscribe通道,它会要求在入站适配器配置和使用语义上有所不同吗?MQTT是pub/sub的事实在某种程度上与您在Spring集成应用程序中与它接口的方式是正交的。如果您希望在同一个应用程序中向多个收件人发送相同的邮件,您可以使用n个s,每个人都有一个直接频道(是的,这是默认设置),或者将单个绑定到一个并让每个收件人订阅该频道。显然(希望是显而易见的),后者更有效,因为只有一个消息副本进入网络。希望这能有所帮助。好的,我必须一次向多个设备发送相同的消息,并按计划接收来自它们的心跳ping,在某些非常特定的条件下,这些消息将发送到单个设备。这样看来,
将是一个更好的选择?如果它们都是从同一主题消费的,那么您不需要发布/订阅,MQTT将为您提供。即使它们订阅不同的主题,您仍然可以使用单个出站适配器实现用例,因为您可以在运行时为每条消息选择主题。