我正在使用spring集成及其对MQTT的支持;我看到了spring集成文档,我的简单测试用例是在MQTT主题上发布消息. Spring文档位于:http://docs.spring.io/spring-integration/reference/html/mqtt.html#_configuring_with_java_configuration_15
我正在使用这些版本:
>春天4.3.4
>春季整合4.3.5
我构建了这个简单的配置类:
@Configuration @IntegrationComponentScan public class CommunicationServerApplication { @Bean public MqttPahoClientFactory mqttClientFactory() { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); factory.setServerURIs(mqttServerUris); if (StringUtils.hasText(mqttUsername) && StringUtils.hasText(mqttPassword)) { factory.setUserName(mqttUsername); factory.setPassword(mqttPassword); } factory.setConnectionTimeout(mqttConnectionTimeout); factory.setKeepAliveInterval(mqttKeepAliveInterval); factory.setPersistence(new MqttDefaultFilePersistence(mqttPersistenceFileDirectory)); return factory; } @Bean @ServiceActivator(inputChannel = "mqttOutboundChannel",autoStartup="true") public MessageHandler mqttOutbound() { String clientId = mqttClientId; if( !StringUtils.hasText(clientId) ) { clientId = UUID.randomUUID().toString(); } MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(clientId,mqttClientFactory()); messageHandler.setAsync(true); messageHandler.setDefaultTopic(mqttTopic); if( mqttQos >= 0 && mqttQos <=2 ) { messageHandler.setDefaultQos(mqttQos); } return messageHandler; } @Bean public MessageChannel mqttOutboundChannel() { DirectChannel dc = new DirectChannel(); return dc; } @MessagingGateway(defaultRequestChannel = "mqttOutboundChannel") public interface MqttMsgproducer { void sendToMqtt(String data); } }
@H_404_15@然后我使用了这个简单的测试用例:
@ContextConfiguration(value ={ "classpath:app-ctx.xml"}) @RunWith(SpringJUnit4ClassRunner.class) public class SimpleMqttTestSuite { private static final Logger logger = LoggerFactory.getLogger(SimpleMqttTestSuite.class.getName()); @Autowired private MqttMsgproducer sender; @Test public void startServerTest() { try { sender.sendToMqtt("Hello"); } catch (Exception e) { logger.error("Error",e); } } }
@H_404_15@我的app-ctx.xml是:
@H_404_15@
执行简单测试,我遇到了这个错误:
2016-12-20 10:46:33,889 49967 [nioEventLoopGroup-3-1] ERROR - Errore org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'org.springframework.context.support.GenericApplicationContext@2e6a8155.mqttOutboundChannel'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:81) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115) ~[spring-messaging-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45) ~[spring-messaging-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105) ~[spring-messaging-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:143) ~[spring-messaging-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:135) ~[spring-messaging-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.integration.gateway.MessagingGatewaySupport.send(MessagingGatewaySupport.java:375) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.gateway.GatewayProxyfactorybean.invokeGatewayMethod(GatewayProxyfactorybean.java:477) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.gateway.GatewayProxyfactorybean.doInvoke(GatewayProxyfactorybean.java:429) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.gateway.GatewayProxyfactorybean.invoke(GatewayProxyfactorybean.java:420) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.integration.gateway.GatewayCompletableFutureProxyfactorybean.invoke(GatewayCompletableFutureProxyfactorybean.java:65) ~[spring-integration-core-4.3.5.RELEASE.jar:4.3.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.4.RELEASE.jar:4.3.4.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) ~[spring-aop-4.3.4.RELEASE.jar:4.3.4.RELEASE]
@H_404_15@我无法想象我在配置中缺少什么.任何人都可以给我一个提示吗?
谢谢
安杰洛
最佳答案