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

来自远程ActiveMQ Artemis的Wildfly JMS使用者

方嘉言
2023-03-14

我试图在Wildfly(版本24)和远程ActiveMQ Artemis代理中实现简单的JMS生产者和消费者。

独立的。xml

<subsystem xmlns="urn:jboss:domain:messaging-activemq:13.0">
    <remote-connector name="remote-artemis" socket-binding="remote-artemis"/>
    <pooled-connection-factory
        name="remote-artemis"
        entries="java:/jms/remoteCF" 
        connectors="remote-artemis" 
        client-id="producer-pooled-connection-factory"
        user="${artemismq.user}"
        password="${artemismq.password}"
        enable-amq1-prefix="true"
    />
    <external-jms-queue name="testQueue" entries="java:/queue/testQueue"/>
</subsystem>

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
    <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="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="txn-recovery-environment" port="4712"/>
    <socket-binding name="txn-status-manager" port="4713"/>
    <outbound-socket-binding name="mail-smtp">
        <remote-destination host="${jboss.mail.server.host:localhost}" port="${jboss.mail.server.port:25}"/>
    </outbound-socket-binding>
    <outbound-socket-binding name="remote-artemis">
        <remote-destination host="${artemismq.host}" port="${artemismq.port}"/>
    </outbound-socket-binding>
</socket-binding-group>

生产者和消费者

    @Inject
    @JMSConnectionFactory("java:/jms/remoteCF")
    private JMSContext context;

    @Resource(lookup = "java:/queue/testQueue")
    private Queue queue;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        try {
            out.write("<p>Sending messages to <em>" + queue + "</em></p>");
            out.write("<p>Using context <em>" + context + "</em></p>");
            out.write("<h2>The following messages will be sent to the destination:</h2>");
            for (int i = 0; i < MSG_COUNT; i++) {
                String text = "This is message " + (i + 1);
                context.createProducer().send(queue, text);
                out.write("Message (" + i + "): " + text + "</br>");

                JMSConsumer consumer = context.createConsumer(queue);
                TextMessage message = (TextMessage) consumer.receive();
                out.write("Message received (" + i + "): " + message.getText() + "</br>");
            }
        } catch (JMSException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                out.close();
            }
        }
    }

Misc:只有制片人才能工作。

结果:代理收到第一条消息,但没有执行消费,也没有发生任何事情(没有日志)。

共有1个答案

孙帅
2023-03-14

关于池连接工厂,文档中说:

当在JNDI中查找或注入时,它应该仅用于发送(即产生)消息。

您应该创建一个“正常”连接工厂,供消费者使用。

 类似资料:
  • 我们最近将一些数据移植到MongoDB,现在正在考虑运行日常备份,最好是从cron作业,并将其中一个备份恢复到辅助mongo数据库。 我们的系统设置如下: 服务器1:开发mongo数据库 服务器2:两个mongo数据库,一个用于暂存数据,一个用于生产 服务器3:是我们运行所有cron作业/批处理脚本的地方 (我尝试了将用户名和密码连接到主机,但没有将用户名和密码连接到主机) 我收到以下信息: Mo

  • 我正在用ApacheKafka版本(2.1.0)开发一个流式API。我有一个Kafka群集和一个外部服务器。外部服务器将生成要在Kafka群集上使用的数据。 让我们将外部服务器表示为E,将集群表示为C。E没有安装Kafka。我在上面运行一个JAR文件来生成消息。以下是Producer属性的代码段: 我将bootstrapIp设置为Kafka代理IP。 在集群端,我使用以下命令启动使用者控制台: 我

  • 我已经在我的一台机器上创建了一个Kafka主题,它的IP为192.168.25.50,主题名为test-poc。然后,通过使用kafka-console-producer,我生成了如下所示的消息 之后,我在另一台机器上下载了Kafka,并尝试使用以下命令消费 其中192.168.25.50是Kafka producer运行的服务器的IP。 因此,在执行上述命令后,我得到以下错误。 注意:当我在同一

  • 我有以下Artifactory(6.12.1)设置 远程存储库: 中央:https://repo.maven.apache.org/maven2 JBoss:https://repository.jboss.org/nexus/content/groups/public/ JCenter https://jcenter.bintray.com jvnet-nexus-staging:http://

  • 当我在主机服务器的浏览器上运行这个应用程序时,我成功地获得了一个json对象(它不是我期望的json,但这是另一个问题)。但是,当我试图访问远程客户端上的站点时,我会得到一个403错误,指向我试图检索响应时的位置。有什么想法吗?

  • 为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。 在本节中,我们将介绍一部分远程管理的技能。 查看