簡體   English   中英

從Wildfly 13向遠程Artemis ActiveMQ發送消息

[英]Sending Messages from Wildfly 13 to remote Artemis ActiveMQ

我正在嘗試將Wildfly 13-實例連接到獨立的Artemis ActiveMQ,以從中產生和使用消息。 因此,我遵循了Wildfly 13文檔Artemis ActiveMQ文檔的相關部分。 此外,我嘗試使用教程,並使用JMS 2.0 Simplified-API對它進行了一些自定義。

當我將有效負載發送到/ produce時,沒有拋出異常。 因此,我認為JNDI存在問題。 我已經用Wireshark監視了正在進行的網絡活動,並且能夠看到Wildfly和Artemis ActiveMQ之間的軟件包交換。 Wildfly不斷嘗試訪問遠程隊列,但是以

AMQ11901 7: Queue does not exist

到現在為止,我還不知道為什么會這樣。

這是我到目前為止所擁有的:

Wildfly配置(standalone-full-ha.xml)

//...
<outbound-socket-binding name="ImportantMessages-remote">
    <remote-destination host="127.0.0.1" port="61616"/>
</outbound-socket-binding>
//...
<subsystem xmlns="urn:jboss:domain:messaging-activemq:3.0">
    <server name="default">       
        <security-setting name="#">
            <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/>
        </security-setting>
        <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10" redistribution-delay="1000"/>
        <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
        <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
            <param name="batch-delay" value="50"/>
        </http-connector>
        <remote-connector name="ImportantMessages-remote" socket-binding="ImportantMessages-remote"/>
        <in-vm-connector name="in-vm" server-id="0">
            <param name="buffer-pooling" value="false"/>
        </in-vm-connector>
        <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">
            <param name="buffer-pooling" value="false"/>
        </in-vm-acceptor>
        <broadcast-group name="bg-group1" jgroups-cluster="activemq-cluster" connectors="http-connector"/>
        <discovery-group name="dg-group1" jgroups-cluster="activemq-cluster"/>
        <cluster-connection name="my-cluster" address="jms" connector-name="http-connector" discovery-group="dg-group1"/>
        <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
        <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
        <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
        <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1"/>
        <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
        <pooled-connection-factory name="ImportantMessages-remote" entries="java:/jms/remoteIM" connectors="ImportantMessages-remote"/>
    </server>
</subsystem>
<subsystem xmlns="urn:jboss:domain:naming:2.0">
    <bindings>
        <external-context name="java:global/remoteContext" module="org.apache.activemq.artemis" class="javax.naming.InitialContext">
            <environment>
                <property name="java.naming.factory.initial" value="org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory"/>
                <property name="java.naming.provider.url" value="tcp://127.0.0.1:61616"/>
                <property name="queue.ImportantMessages" value="ImportantMessages"/>
            </environment>
        </external-context>
        <lookup name="java:/ImportantMessages" lookup="java:global/remoteContext/ImportantMessages"/>
    </bindings>
    <remote-naming/>
</subsystem>

MessageProducerRessource

@Stateless
@Path("produce")
public class MessageProducerResource {

    private static final Logger LOG = Logger.getLogger(MessageProducerResource.class.getName());

    @Inject
    @JMSConnectionFactory("java:/jms/remoteIM")
    private JMSContext jmsContext;

    @Resource(lookup = "java:global/remoteContext/ImportantMessages")
    private Queue queue;

    @POST
    public void sendMessage(String txt) {
        jmsContext.createProducer().send(queue, txt);
        LOG.info("Sent message containing \"" + txt + "\" to " + queue);
    }
}

我相信這些是相關的代碼片段。 如果您需要任何更多信息,請隨時詢問。 有人遇到過類似的問題並且可以幫助我嗎?

可能您需要在artemis代理上設置安全憑證,並將用戶/密碼添加到pooled-connection-factory。

<pooled-connection-factory name="ImportantMessages-remote" entries="java:/jms/remoteIM" connectors="ImportantMessages-remote" user="user123" password="Password123"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM