1
spring-framework
및 spring-integration
최신 버전을 사용 중이며 스프링 통합으로 POC 애플리케이션을 만들고 있지만이를 실행할 수 없습니다.스프링 통합 : 채널에 메시지를 보낼 수 없습니다.
저는 스프링 통합이 이와 같은 것을 포함하고 있습니다.
<bean id="initUrlQ" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="initUrl.Q" />
</bean>
<int:channel id="initChannelProducerId" />
<jms:outbound-channel-adapter id="initOutboundId" channel="initChannelProducerId" connection-factory="padtoys.jms.cachedConnectionFactory"
destination="initUrlQ" />
<int:channel id="initChannelConsumerId" />
<jms:message-driven-channel-adapter id="initQListenerId" channel="initChannelConsumerId"
connection-factory="padtoys.jms.cachedConnectionFactory" destination="initUrlQ"
acknowledge="auto" concurrent-consumers="1" max-concurrent-consumers="1" />
<int:service-activator method="testSA" ref="testBean" input-channel="initChannelConsumerId" output-channel="nullChannel"/>
그리고 내 testBean
자바 파일은 다음과 같습니다.
public class TestBean implements ApplicationContextAware {
private ApplicationContext applicationContext;
@PostConstruct
public void afterInit(){
System.err.println("after init..!");
DirectChannel inChannel = applicationContext.getBean("initChannelProducerId", DirectChannel.class);
System.err.println("channel::" + inChannel);
inChannel.send(createMessage("This is test url!!", 0));
}
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@ServiceActivator
public String testSA(){
System.err.println("inside service activator!!!");
return "this is test";
}
private Message<String> createMessage(final String url, final int depth) {
return MessageBuilder.withPayload(StringUtils.EMPTY)
.setHeader(MESSAGE_HEADERS.URL, url)
.setHeader(MESSAGE_HEADERS.DEPTH, depth).build();
}
}
그리고 이런 식으로 응용 프로그램을 시작합니다.
@SuppressWarnings("resource") public static void main(String[] args) {
LOG.info("Trigerring process!");
new ClassPathXmlApplicationContext("/application-context.xml");
}
내가 봄 컨텍스트 XML의
testBean
및
padtoys.jms.cachedConnectionFactory
를 선언 한 것을 고려하시기 바랍니다.
문제 :
나는 오류가 아래지고, 응용 프로그램을 시작
Caused by: org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'org[email protected]5a1198c7.initChannelProducerId'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:373)
at com.dodax.pad.ext.toys.crawler.scanner.TestBean.afterInit(TestBean.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:366)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:311)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:134)
... 30 more
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:138)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
참고 :이 줄에서 오른쪽 채널 이름을 얻고있다
, System.err.println("channel::" + inChannel);
하지만, 문제는 채널로 메시지를 보내려고 할 때 시작됩니다.
감사합니다. @Gary, 사실 저는이 게시물 이후에이 답변을 참조했으며 완벽하게 작동했으며 투표로 답변을 표시했습니다. :) –