Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring集成:无法将消息发送到通道_Java_Spring_Spring Integration_Activemq_Spring Jms - Fatal编程技术网

Java Spring集成:无法将消息发送到通道

Java Spring集成:无法将消息发送到通道,java,spring,spring-integration,activemq,spring-jms,Java,Spring,Spring Integration,Activemq,Spring Jms,我正在使用springframework和springintegration最新版本,只是用springintegration制作POC应用程序,但无法运行 我有这样的想法 <bean id="initUrlQ" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg value="initUrl.Q" /> </bean> <int:

我正在使用
springframework
springintegration
最新版本,只是用springintegration制作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"/>
我正在开始这样的应用程序

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");
    }

请考虑在Spring上下文XML.< /P>中声明<代码> TestBea<代码> > <代码> PADPoo.JMS.CaseDeCdAccess Cuthor <代码> > 问题:

当我启动应用程序时,出现以下错误

Caused by: org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'org.springframework.context.support.ClassPathXmlApplicationContext@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(“频道::”+inChannel),但当我尝试将消息发送到频道时,问题开始出现。

您不能在
@PostConstruct
方法中执行消息(
send()
)-在应用程序上下文生命周期中太早;上下文尚未准备好执行消息传递


请参阅在启动过程中执行消息传递的正确位置。

谢谢@Gary,实际上我在这篇文章之后引用了这个答案,它运行得非常好,我还用up VOUT标记了这个答案:)