Spring integration Spring-Mqtt集成
我正在尝试实现Spring集成,当我运行应用程序时,我可以接收有关订阅主题的消息。但是如何在运行时添加更多主题呢 我尝试了控制器的以下功能:Spring integration Spring-Mqtt集成,spring-integration,mqtt,Spring Integration,Mqtt,我正在尝试实现Spring集成,当我运行应用程序时,我可以接收有关订阅主题的消息。但是如何在运行时添加更多主题呢 我尝试了控制器的以下功能: @RequestMapping(“/suscribetest”) @应答器 公共字符串subscribeTest(){ AnnotationConfigApplicationContext上下文=新的AnnotationConfigApplicationContext(MqttInboundBeans.class); MQTTPAHomeMessageDr
@RequestMapping(“/suscribetest”)
@应答器
公共字符串subscribeTest(){
AnnotationConfigApplicationContext上下文=新的AnnotationConfigApplicationContext(MqttInboundBeans.class);
MQTTPAHomeMessageDrivenChannelAdapter messageChannel=context.getBean(“入站”,MQTTPAHomeMessageDrivenChannelAdapter.class);
messageChannel.addTopic(“测试”,2);
返回“”;
}
下面是我用来订阅主题的bean设置
@配置
公共类MqttInboundBeans{
@自动连线
私人用户服务;
@豆子
公共消息通道mqttInputChannel(){
返回新的DirectChannel();
}
@豆子
public MessageProducer inbound(){
MQTTPAHomeMessageDrivenChannelAdapter适配器=
新MQTTPAHomeMessageDrivenChannelAdapter(“tcp://localhost:1883“,”测试客户端“,
“数据/#”,“LD/#”);
adapter.setCompletionTimeout(0);
setConverter(新的DefaultPaHomeMessageConverter());
adapter.setQos(2);
setOutputChannel(mqttInputChannel());
返回适配器;
}
@豆子
@ServiceActivator(inputChannel=“mqttInputChannel”)
public MessageHandler(){
返回新的MessageHandler(){
@凌驾
public void handleMessage(消息消息消息)引发MessaginException{
System.out.println(message.getHeaders()+“”+message.getPayload());
}
};
}
}
我得到了以下错误:
2017-03-03 17:29:47.846错误4524-[bio-8080-exec-8]o.s.boot.web.support.ErrorPageFilter:由于异常[创建名为'mqttInboundBeans'的bean时出错]:通过字段'service'表示的未满足的依赖关系;
嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:没有“com.ehydromet.service.UserService”类型的合格bean可用:至少需要1个符合autowire候选项条件的bean。依赖项批注:{@org.springframework.beans.factory.annotation.Autowired(required=true)}]
org.springframework.beans.factory.unsatifiedpendencyException:创建名为“mqttInboundBeans”的bean时出错:通过字段“service”表示未满足的依赖关系;嵌套异常为org.springframework.beans.factory.NoSuchBean定义异常:没有类型为“com.ehydromet.service.UserService”的合格bean可用:至少需要1个符合autowire候选条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
在org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:588)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.annotation.AutowiredNotationBeanPostProcessor.postProcessPropertyValues(AutowiredNotationBeanPostProcessor.java:366)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1225)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:759)~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866)~[spring-context-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)~[spring-context-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在org.springframework.context.annotation.AnnotationConfigApplicationContext.(AnnotationConfigApplicationContext.java:84)~[spring-context-4.3.5.RELEASE.jar:4.3.5.RELEASE]
在com.ehydromet.springboot.controller.LatestDataController.subscribeTest(LatestDataController.java:72)~[LatestDataController.class:na]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.7.0\u 79]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)~[na:1.7.079]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.7.079]
在java.lang.reflect.Method.invoke(Method.java:606)~[na:1.7.079]
在org.springframework.web.method上。
@SpringBootApplication
@Controller
public class So42578862Application {
public static void main(String[] args) {
SpringApplication.run(So42578862Application.class, args);
}
@Autowired
private MqttPahoMessageDrivenChannelAdapter adapter;
@RequestMapping("/subscribeTest")
@ResponseBody
public String handle() {
if (adapter.getTopic().length == 0) {
adapter.addTopic("DATA/#", "LD/#");
}
return "";
}
@Bean
public MqttPahoMessageDrivenChannelAdapter inbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883",
"testClient", new String[0]);
adapter.setCompletionTimeout(0);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(2);
adapter.setOutputChannelName("mqttInputChannel");
return adapter;
}
@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println(message.getHeaders() + " " + message.getPayload());
}
};
}
@InboundChannelAdapter(channel = "out", poller = @Poller(fixedDelay = "5000"))
public String message() {
return "foo";
}
@Bean
@ServiceActivator(inputChannel = "out")
public MqttPahoMessageHandler outHandler() {
MqttPahoMessageHandler outHandler = new MqttPahoMessageHandler("tcp://localhost:1883", "outClient");
outHandler.setDefaultTopic("DATA/foo");
return outHandler;
}
}