Spring Integration XMPP-如果XmppConnectionFactoryBean的属性AutoStart配置为false,则无法向聊天服务器发送消息
如果XmppConnectionFactoryBean的属性AutoStart配置为false,我将无法向聊天服务器发送消息 一切正常,在配置AutoStart=true时发送消息 如果在聊天服务器无法检查时启动ApplicationContext,Configure autoStartup=false有助于避免部署失败 我使用的Spring集成版本是4.1.1-RELEASE 我正在使用Spring ApplicationContext配置XMPP消息出站通道适配器,如下代码块所述:Spring Integration XMPP-如果XmppConnectionFactoryBean的属性AutoStart配置为false,则无法向聊天服务器发送消息,xmpp,spring-integration,Xmpp,Spring Integration,如果XmppConnectionFactoryBean的属性AutoStart配置为false,我将无法向聊天服务器发送消息 一切正常,在配置AutoStart=true时发送消息 如果在聊天服务器无法检查时启动ApplicationContext,Configure autoStartup=false有助于避免部署失败 我使用的Spring集成版本是4.1.1-RELEASE 我正在使用Spring ApplicationContext配置XMPP消息出站通道适配器,如下代码块所述:
<bean id="my-xmpp-connection" class="org.springframework.integration.xmpp.config.XmppConnectionFactoryBean">
<constructor-arg>
<bean class="org.jivesoftware.smack.ConnectionConfiguration">
<constructor-arg value="myHost"/>
<constructor-arg value="myport"/>
<constructor-arg value="myService"/>
<property name="securityMode" value="disabled" />
</bean>
</constructor-arg>
<property name="user" value="myUser" />
<property name="password" value="myPassword" />
<property name="autoStartup" value="false" />
</bean>
<int-xmpp:outbound-channel-adapter id="my-xmpp-outbound-adapter"
channel="my-input-channel"
xmpp-connection="my-xmpp-connection"/>
其他人也注意到了同样的行为
先谢谢你。
Massimo请从一侧查看
SmartLifecycle
JavaDocs,并研究基于AutoStart=false
的组件的正常行为。换句话说,您刚刚确认XmppConnectionFactoryBean
按设计工作;-)
好吧,让我们分析一下那里发生了什么
XmppConnectionFactoryBean
生成XMPPConnection
,如果不调用它的connect()
,它将不可用。这正是通过Spring的applicationContext中的XmppConnectionFactoryBean
的start()
/stop()
完成的
从另一方面来说,您已经对部署失败做出了正确的结论,所以从直观的角度来看,您知道它是什么,以及可以从中得到什么
要解决问题,您必须手动执行以下操作:
&myXmppConnection.start();
其中,myXmppConnection
是XmppConnectionFactoryBean
bean定义的id,&
是BeanFactory\FACTORY\ubean\ucode>前缀,因为XmppConnectionFactoryBean。最后是启动XMPPConnection.connect()的
start()
当然,当应用程序上下文自动执行autoStartup=true
时,您的XMPPConnection
会在应用程序启动后尝试连接到XMPP服务器
希望我说得清楚。Hi@artem,谢谢你的回复。我使用您的建议解决了我的问题:我认为我的解决方案没有那么干净和优雅:我创建了一个ChannelInterceptor来检查连接状态,并相应地调用XmppConnectionFactoryBean的start()方法。我现在可以配置autoStartup=false,并在发送消息之前打开连接。谢谢。MassimoI在您start()
该组件的位置没有意义。我认为在将消息发送到适配器之前,从通道拦截器
执行此操作听起来确实正确。如果答案适合您,最好将其标记为已接受,以便让其他社区依赖它。