我正在学习如何使用Java Spring框架,并开始尝试Spring集成。我试图使用Spring集成将我的应用程序连接到MQTT代理以发布和订阅消息,但我很难找到将消息手动发布到出站通道的方法。如果可能的话,我想专门使用java代码中的符号来构建它,而不是使用定义bean和其他相关配置的xml文件。
在每个示例中,我都看到手动发布消息的解决方案似乎是使用MessagingGateway接口,然后使用SpringApplicationBuilder获取ConfigurableApplicationContext,以在主方法中获取对网关接口的引用。然后使用该引用发布消息。是否可以将AutoWired用于接口?在我的尝试中,我只得到了一个空指针。
我的目标是构建一个游戏,在其中我订阅一个主题以获取游戏消息,然后每当用户准备好进行下一步操作时,就向该主题发布一条新消息。
更新:这是我一直在看的关于如何设置出站通道的示例之一:https://docs.spring.io/spring-integration/reference/html" target="_blank">html/mqtt.html
Gary Russel回答后更新2:
这是我在查看了一些示例后编写的示例代码,这些示例在运行Gateway时为网关使用@AutoWired时会得到一个null指针。控制器中的sendToMqtt。Java语言这里我想要实现的是在控制器处理GET请求时手动发送mqtt消息。
应用Java语言
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
控制器。Java语言
@RestController
@RequestMapping("/publishMessage")
public class Controller {
@Autowired
static Gateway gateway;
@RequestMapping(method = RequestMethod.GET)
public int request(){
gateway.sendToMqtt("Test Message!");
return 0;
}
}
MqttPublisher。Java语言
@EnableIntegration
@Configuration
public class MqttPublisher {
@Bean
public MqttPahoClientFactory mqttClientFactory(){
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setServerURIs("tcp://localhost:1883");
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound(){
MqttPahoMessageHandler messageHandler =
new MqttPahoMessageHandler("clientPublisher", mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic("topic");
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel(){
return new DirectChannel();
}
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface Gateway {
void sendToMqtt(String data);
}
}
更新:
不确定这是否是正确的日志记录,但这是我从添加中得到的:
logging.level.org.springframework.web=Debug
logging.level.org.hibernate=Error
应用程序。属性。
https://hastebin.com/cuvonufeco.hs
使用消息网关或只需向通道发送消息。
编辑
@SpringBootApplication
public class So47846492Application {
public static void main(String[] args) {
SpringApplication.run(So47846492Application.class, args).close();
}
@Bean
public ApplicationRunner runner(MyGate gate) {
return args -> {
gate.send("someTopic", "foo");
Thread.sleep(5_000);
};
}
@Bean
@ServiceActivator(inputChannel = "toMqtt")
public MqttPahoMessageHandler mqtt() {
MqttPahoMessageHandler handler = new MqttPahoMessageHandler("tcp://localhost:1883", "foo",
clientFactory());
handler.setDefaultTopic("myTopic");
handler.setQosExpressionString("1");
return handler;
}
@Bean
public MqttPahoClientFactory clientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
factory.setUserName("guest");
factory.setPassword("guest");
return factory;
}
@Bean
public MqttPahoMessageDrivenChannelAdapter mqttIn() {
MqttPahoMessageDrivenChannelAdapter adapter =
new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883", "bar", "someTopic");
adapter.setOutputChannelName("fromMqtt");
return adapter;
}
@ServiceActivator(inputChannel = "fromMqtt")
public void in(String in) {
System.out.println(in);
}
@MessagingGateway(defaultRequestChannel = "toMqtt")
public interface MyGate {
void send(@Header(MqttHeaders.TOPIC) String topic, String out);
}
}
本文向大家介绍Python如何将消息发布到RabbitMQ,包括了Python如何将消息发布到RabbitMQ的使用技巧和注意事项,需要的朋友参考一下 示例 从导入库开始。 接下来,我们需要打开与RabbitMQ服务器的连接。 之后,我们需要建立一个频道。每个连接可以有多个通道,通常在执行多线程任务时,建议(但不是必需)每个线程一个。 建立频道后,我们就可以开始准备信息了。 现在,我们可以通过简单
物联网有很多设备,通过这条指令可以向某个特定的物联网设备发送特定的消息内容。 请求方式: "|4|1|3|topic|message|" 参数: topic 设置订阅的topic,获取设备topic可参考教程 message 发布消息的内容 返回值: "|4|1|3|1|\r" 消息发送成功 "|4|1|3|2|\r" 消息发送失败 Arduino样例: softSerial.print("|4|
我创建了一个开源项目,希望将其发布到maven central,以便用户只需在POM中引用它就可以使用该库。例如: 我找到了几个在线教程,但其中一些已经过时,一些建议自动化整个过程,从而公开复杂化它。 例如,一篇教程建议为github帐户创建SSH键,并让maven在推送到maven Central时自动创建一个git标记。虽然这是有用的,但没有必要开始。 另一个例子,试图直接通过maven发布它
问题内容: 如何要求机器人将消息发送到与机器人接收命令不同的另一个通道(特定通道)? 假设bot 在channel中接收到消息,并且如果操作完成,则bot发送到channel 。 代码: 代码: 问题答案: 答案很简单:
我通过自定义管理的KMS密钥有一个加密的SQS队列和SNS主题。目前,我正在使用下面链接中所述的类似类型的SQS策略,它可以正常工作SQS策略 但是如果我使用下面的SQS策略,它就不起作用了。出于安全原因,我不想将主体设置为“*”。有人能解释一下为什么会发生这种情况吗
我是新Kubernetes。我在一个pod中实现了一个网络服务器,并为该pod设置了一个Nodeport服务。我想发送一个POST请求与自定义消息(在json中)到一个pod后,它已经被创建并准备好使用。我想使用go客户端库。你能告诉我怎么做吗?图书馆的哪个部分来帮忙?谢谢。