当前位置: 首页 > 知识库问答 >
问题:

远程服务器上的Spring访问 JMS

松昱
2023-03-14

我有一个Maven Spring 4应用程序,我在 http://localhost:9292 的本地 Jetty 服务器上运行。我还有一个在 http://localhost:9990 运行的 JBoss EAP 服务器,我在其上创建了一个 JMS 主题。

但是我不知道如何从我的Spring应用程序中访问JMS元素。

在这篇文章的末尾是JBoss EAP 7配置文件中的一些元素独立.xml(消息传递部分)

final Properties env = new Properties();
env.put(Context.PROVIDER_URL, "remote://http://localhost:9990");

Context context = new InitialContext(env);
ConnectionFactory cf = (ConnectionFactory) context.lookup("RemoteConnectionFactory");

但是我有一个错误:

javax . naming . namenotfoundexception;剩余名称“RemoteConnectionFactory”

你知道我如何使用远程JMS元素,如连接工厂,主题,...

提前感谢您的帮助

<subsystem xmlns="urn:jboss:domain:messaging-activemq:1.0">
    <server name="default">
        <cluster password="${jboss.messaging.cluster.password:CHANGE ME!!}"/>
        <security-setting name="#">
            <role name="guest" delete-non-durable-queue="true" create-non-durable-queue="true" consume="true" send="true"/>
        </security-setting>
        <address-setting name="#" redistribution-delay="1000" message-counter-history-day-limit="10" page-size-bytes="2097152" max-size-bytes="10485760" expiry-address="jms.queue.ExpiryQueue" dead-letter-address="jms.queue.DLQ"/>
        <http-connector name="http-connector" endpoint="http-acceptor" socket-binding="http"/>
        <http-connector name="http-connector-throughput" endpoint="http-acceptor-throughput" socket-binding="http">
            <param name="batch-delay" value="50"/>
        </http-connector>
        <in-vm-connector name="in-vm" server-id="0"/>
        <http-acceptor name="http-acceptor" http-listener="default"/>
        <http-acceptor name="http-acceptor-throughput" http-listener="default">
            <param name="batch-delay" value="50"/>
            <param name="direct-deliver" value="false"/>
        </http-acceptor>
        <in-vm-acceptor name="in-vm" server-id="0"/>
        <broadcast-group name="bg-group1" connectors="http-connector" jgroups-channel="activemq-cluster"/>
        <discovery-group name="dg-group1" jgroups-channel="activemq-cluster"/>
        <cluster-connection name="my-cluster" discovery-group="dg-group1" connector-name="http-connector" address="jms"/>
        <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
        <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
        <jms-topic name="my_topic" entries="java:/jms/topic/my_topic"/>
        <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
        <connection-factory name="RemoteConnectionFactory" reconnect-attempts="-1" block-on-acknowledge="true" ha="true" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector"/>
        <pooled-connection-factory name="activemq-ra" transaction="xa" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm"/>
    </server>
</subsystem>

套接字绑定部分:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
    <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
    <socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
    <socket-binding name="http" port="${jboss.http.port:8080}"/>
    <socket-binding name="https" port="${jboss.https.port:8443}"/>
    <socket-binding name="iiop" interface="unsecure" port="3528"/>
    <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/>
    <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
    <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
    <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
    <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
    <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
    <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
    <socket-binding name="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="localhost" port="25"/>
    </outbound-socket-binding>
</socket-binding-group>

共有1个答案

姬振濂
2023-03-14

我看到一些错误:

>

  • 我建议指定初始上下文工厂,例如:

    env.put(Context.INITIAL_CONTEXT_FACTORY, org.jboss.naming.remote.client.InitialContextFactory.class.getName());
    

    默认情况下,您的JNDI查找应该使用< code > http-remoting://localhost:8080 。

    远程客户端根据服务器端配置中< code > Java:JBoss/exported/之后的内容查找JNDI条目。对于< code > RemoteConnectionFactory 连接工厂,您应该在查找中使用< code > JMS/RemoteConnectionFactory ,例如:

    ConnectionFactory cf = (ConnectionFactory) context.lookup("jms/RemoteConnectionFactory");
    

    如果您想从远程客户端查找< code>my_topic主题,您需要添加一个远程显示JNDI名称的条目,例如:

    <jms-topic name="my_topic" entries="java:/jms/topic/my_topic java:jboss/exported/jms/topic/my_topic"/>
    

  •  类似资料:
    • 问题内容: 我正在使用JBoss运行客户端/服务器应用程序。 如何连接到服务器JVM的MBeanServer?我想使用MemoryMX MBean来跟踪内存消耗。 我可以使用JNDI查找连接到JBoss MBeanServer,但是java.lang.MemoryMX MBean没有在JBoss MBeanServer中注册。 编辑:要求是从客户端以编程方式访问内存使用情况。 问题答案: 与JBo

    • 问题内容: 我已经开始使用docker进行开发,并进行以下设置: 主机-ubuntu服务器。 Docker容器-带有tomcat服务器的webapp(使用https)。 就主机-容器访问而言-一切正常。 但是 ,我无法从远程计算机(尽管仍然在同一网络中)访问容器的webapp。 跑步时 输出符合预期,因此docker的端口绑定看起来不错。 有任何想法吗? 谢谢! 问题答案: 我发现了我错过的内容,

    • 已在远程linux计算机上安装了Anaconda Python。 在本地Windows上使用puty登录到远程linux机器以远程启动Ipython笔记本。它从8888端口开始。 遥远的_user@remote_host$ipython笔记本电脑--无浏览器--端口=8888 现在我需要在本地浏览器上访问这个笔记本。尝试过做ssh隧道。 C:\用户\windowsUser SSH:连接到主机rem

    • 尝试远程启动服务时遇到奇怪的行为。 编辑:我进一步研究了这个问题,发现只有在尝试运行我的特定服务时才会出现这种情况。这意味着我的服务必须从已经登录的用户的会话中运行(这就是为什么如果我之前使用mstsc访问服务器,它仍然可以工作)。所以我想我的新问题是--有没有一种方法可以让我从PowerShell登录到远程机器? 多谢了。

    • 我创建了一个Amazon Linux 2实例,在其中部署了一个用systemd启动的Java程序。Java程序是一个Vertex shell应用程序,它使用Apache Mina在端口2000上启动SSH服务器。应该可以通过两种方式连接到SSH服务器:公钥或密码验证。 在端口22上进行经典ssh身份验证以访问我的amazon实例后,我可以使用密码auth本地连接到在端口2000上运行的java s

    • 本文向大家介绍redis服务器允许远程主机访问的方法,包括了redis服务器允许远程主机访问的方法的使用技巧和注意事项,需要的朋友参考一下 若远程主机需要访问redis服务器,可以修改redis.conf配置文件 bind字段默认为: bind 127.0.0.1 这样只能本机访问redis 若允许远程主机访问,可注释掉bind行   或者    将bind 127.0.0.1改为: bind 0