Spring integration Spring-Mqtt集成

Spring integration Spring-Mqtt集成,spring-integration,mqtt,Spring Integration,Mqtt,我正在尝试实现Spring集成,当我运行应用程序时,我可以接收有关订阅主题的消息。但是如何在运行时添加更多主题呢 我尝试了控制器的以下功能: @RequestMapping(“/suscribetest”) @应答器 公共字符串subscribeTest(){ AnnotationConfigApplicationContext上下文=新的AnnotationConfigApplicationContext(MqttInboundBeans.class); MQTTPAHomeMessageDr

我正在尝试实现Spring集成,当我运行应用程序时,我可以接收有关订阅主题的消息。但是如何在运行时添加更多主题呢

我尝试了控制器的以下功能:

@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;
    }

}