我正在尝试一个演示应用程序,我们通过UI发送命令然后通过spring集成向设备发送命令并将命令状态返回给UI,这是我第一次使用Spring Integration而且有点不确定频道的各种实现。 MQTT不提供P2P直接通信,因此我应该在我的流,PublishSubscribe或Direct中使用哪个通道用于入站和出站适配器?
答案 0 :(得分:1)
我认为您需要了解的不仅仅是"我应该使用哪种频道类型?"。
如果您的意思是要向设备发送命令并等待回复并将该回复发送到浏览器,则需要将本质上异步的协议转换为同步请求/回复方案。
你会以某种方式暂停http请求线程,直到收到来自设备的异步回复,将回复与请求关联起来,并在将回复交给它后释放请求线程。
您可以在using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
[DataContract()]
class POCO
{
[DataMember(Name = "new_token")]
public string NewToken { get; set; }
[DataMember(Name = "expires_in")]
public string ExpiresIn { get; set; }
[DataMember(Name = "login_type")]
public string LoginType { get; set; }
}
class SomeClass
{
void DoSomething(string json)
{
MemoryStream reader;
POCO output;
DataContractJsonSerializer serializer;
reader = new MemoryStream(Encoding.Unicode.GetBytes(json));
serializer = new DataContractJsonSerializer(typeof(POCO));
output = serializer.ReadObject(reader) as POCO;
}
}
中简单地进行关联,并将回复发送到控制器中的其他方法,在那里进行关联,然后释放http线程。
@Controller
This answer有一种针对类似用例的技术;我们considering adding a component to the framework使这些场景更容易实现。
在任何情况下,您都可以使用<int-mqtt:inbound-channel-adapter channel="results" .../>
<int:channel id="results" />
<int:service-activator ref="myController"
method="someMethodToReceiveTheReplyAndCorrelateToRequest" />
来连接组件。
如果我完全误解了你的问题,请澄清。