【问题标题】:How to subscribe on JMS topic through Mule?如何通过 Mule 订阅 JMS 主题?
【发布时间】:2015-01-15 11:44:02
【问题描述】:

我需要通过 Mule 订阅一个 JMS 主题。我们使用的是 Mule 3.5

我已经设置了这个流程:

<jms:connector name="vos-jms-connector" specification="1.1"
    validateConnections="true"
    connectionFactoryJndiName="ConnectionFactory"
    doc:name="JMS" password="guest" username="guest">
    <jms:custom-jndi-name-resolver
        class="org.mule.transport.jms.jndi.CachedJndiNameResolver">
        <spring:property name="jndiInitialFactory"
            value="org.jnp.interfaces.NamingContextFactory" />
        <spring:property name="jndiProviderUrl" value="jnp://xx.xx.16.41:1099" />
    </jms:custom-jndi-name-resolver>
</jms:connector>

<flow name="vcm-vos-vpo-topic" doc:name="vcm-vos-vpo-topic">
    <jms:inbound-endpoint topic="VPOtopic"
        connector-ref="vos-jms-connector" doc:name="VPOtopic" responseTimeout="4000" />
    <logger message="request for topic" level="INFO" doc:name="Logger"/>
</flow>

当我运行 Mule 项目时,我希望我可以使用以下 java 代码连接到该主题(这在同一台机器上的另一个项目中运行):

    Properties props = new Properties();
    props.setProperty(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");
    props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    InitialContext context = new InitialContext(props);
    TopicConnectionFactory topicConnectionFactory = (TopicConnectionFactory) context.lookup("ConnectionFactory");
    Topic vpoTopic = (Topic) context.lookup("VPOtopic");

但是,我收到“拒绝连接”异常:

Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: 127.0.0.1:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server /127.0.0.1:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server /127.0.0.1:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]]
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1828)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:717)
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:710)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at nl.triopsys.vcm.vos.jmsmock.Main.getInitialContext(Main.java:132)
    at nl.triopsys.vcm.vos.jmsmock.Main.main(Main.java:65)
Caused by: javax.naming.CommunicationException: Failed to connect to server /127.0.0.1:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server /127.0.0.1:1099 [Root exception is java.net.ConnectException: Connection refused: connect]]
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:359)
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:284)
    at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1798)
    ... 5 more
Caused by: javax.naming.ServiceUnavailableException: Failed to connect to server /127.0.0.1:1099 [Root exception is java.net.ConnectException: Connection refused: connect]
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:329)
    ... 7 more
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:529)
    at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:97)
    at org.jnp.interfaces.TimedSocketFactory.createSocket(TimedSocketFactory.java:82)
    at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:325)
    ... 7 more

如何连接到本地主机上的入站端点?

【问题讨论】:

    标签: mule jndi mule-studio


    【解决方案1】:

    您真的在使用 JNDI 服务吗? 通常,您不需要在主题属性上设置全名,只需使用名称即可:

    虽然从一个主题读取并写入同一个主题很奇怪。

    【讨论】:

    • 维克多,谢谢你的回答,我想我更接近一点,请看我的编辑。
    • 您在 127.0.0.1:1099 中的 jnp 服务看起来因外部连接而关闭。是否有可能适用于您的其他项目,因为该代码位于托管 jndi 的同一容器上?你能试试 telnet 127.0.0.1 1099 吗?
    • 谢谢。打开端口后,出现同样的异常。 Telnet 连接也被拒绝,但这是因为您无法远程登录到 localhost。还有其他建议吗?
    • 您应该能够从 Mule 运行的同一主机远程登录到具有 jnp 服务的主机。
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 2016-06-17
    • 2011-07-10
    • 2018-08-14
    • 2015-04-06
    • 1970-01-01
    • 2018-01-02
    • 2010-11-18
    相关资源
    最近更新 更多