我正在使用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);
}
}
然后我使用了这个简单的测试用例:
@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);
}
}
}
我的app-ctx.xml是:
执行简单测试,我遇到了这个错误:
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]
我无法想象我在配置中缺少什么.任何人都可以给我一个提示吗?
谢谢
安杰洛