问题标签 [activemq-artemis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - Artemis:如何停止消费错误消息?
如何配置 ActiveMQ Artemis 或我的 Spring JMS 客户端在错误时不使用任何其他消息?
我已经按如下方式配置了我的代理:
这是我的消费者的代码:
发送message1
时,message2 with error
我message3
希望消费者永远处理message1
并重试。在成功消费之前不应处理。实际发生的是在重试之间消耗。如何改变这种行为?有任何想法吗?message2 with error
message3
message2 with error
message3
spring-boot - Spring-boot 应用程序与 Apache Artemis 集群连接
当 Spring-Boot 获得 Artemis 在类路径上可用时,它可以自动配置连接工厂。但是我们如何将 spring-boot 应用程序配置到本地 Artemis 集群(多节点)
jms - ActiveMQ 和 MDB - 更喜欢使用旧消息(更喜欢 FIFO)
我们在 ActiveMQ 中有一个队列,由同一 MDB 的约 50 个实例(会话)使用。
问题是有时队列会收到很多消息,并在不同的分钟内不断收到很多消息。消费者正在拉取更新的消息。因此,在队列几乎为空之前,不会提取较旧的消息。如果队列满了(消息比消费者多得多),则根本不会使用旧消息。
有没有办法配置 ActiveMQ Artemis 或 MDB (Wildfly 10) 以优先从队列中提取较旧的消息?
jakarta-ee - 将 JMS 消息从 Java EE 应用程序发送到 Java SE 应用程序
由于配置错误,我不确定我遇到的问题是概念问题还是技术问题。
目标是在应用程序容器中托管的 Java EE 应用程序(这里特别是 WildFly)和独立运行的 Java SE 应用程序之间发送两种方式的消息,所有这些都使用标准 JMS 协议和主题。我虽然这将是可能的,只要他们都使用相同的经纪人和相同的主题。
所以我有一个作为消息代理运行的外部 Artemis 实例,并在 Java EE 应用程序的不同 bean 中成功设置了生产者和消费者。他们都使用名为“topic1”的相同主题。该生产者发送的消息被消费者 bean 成功接收。
现在,我在 Java EE 应用程序中设置了另一对消费者和生产者,该应用程序作为独立应用程序在任何容器之外运行。他们连接到同一个代理,并且使用相同的主题“topic1”。这个生产者发送的消息也被这个消费者接收。
我期待当任何生产者发布消息时,两个消费者都会收到它们。但这两个应用程序之间没有任何关系。容器内的应用程序都不会从独立的应用程序接收消息,也不会以其他方式接收消息。我在这里犯了一个概念上的错误还是配置有问题?
jms - 通过不稳定连接发送大文件的最佳协议
用例:需要通过队列从一台服务器向另一台服务器发送一个巨大的文件(100 MB 的倍数)。
目前,我正在使用 Activemq Artemis 服务器在输入流的帮助下通过 tcp 协议将大文件作为 ByteMessage 发送,重试间隔为 -1 以进行无限制的故障转移重试。这里的主要问题是消费者端点连接将主要不稳定,即由于移动性而与网络断开连接。
因此,当在队列中发送文件时,如果连接断开并且重新连接的代理应该从事务中断的位置恢复(例如),同时将 300 mb 的文件传输到消费者队列,假设 100 mb 的一部分被传输到消费者队列服务器,然后连接断开并在一段时间后重新连接,然后进程应该从传输剩余的 200 mb 而不是整个 300 mb 重新开始。
我的问题是哪一个是在 ActiveMQ Artemis 中实现它的最佳协议(tcp、Stomp 和 openwire)和最佳实践(blobmessage、bytemessage 输入流)
java - 使用 Wildlfy 11 嵌入式 Apache Artemis 接收 MQTT 消息
我想在 Wildfly 11 中使用嵌入式 Apache Artemis 接收 MQTT 消息。
当前状态:
我向 Wildfly 嵌入式 Apache Artemis 添加了 MQTT 协议支持(添加了“缺失”文件夹和 artemis-mqtt-protocol-.jar 并在 module.xml 中启用了协议)
我正在使用完整的独立配置并为 MTQQ 添加了接受器:
和主题为:
- 还将 mqtt 添加到套接字绑定
从日志中我可以看到它有效:
AMQ221020:在 127.0.0.1:1883 开始接受协议的协议 [MQTT]
AMQ221007:服务器现已上线 AMQ221001:Apache ActiveMQ Artemis 消息代理版本 1.5.5.jbossorg-008
AMQ221003:部署队列 jms.queue.DLQ
WFLYMSGAMQ0002:将消息传递对象绑定到 jndi 名称 java:/ConnectionFactory
AMQ221003:部署队列 jms.queue.ExpiryQueue
WFLYMSGAMQ0002:将消息传递对象绑定到 jndi 名称 java:jboss/exported/jms/RemoteConnectionFactory
AMQ221052:部署主题 jms.topic.testEndpoint
- 接下来我写了一个简单的MDB:
- 我可以在端口 1883 上连接到服务器,当我向 testEndpoint 发送消息时,我可以在日志中看到:
会话创建:63f14f85-0fa2-4fe7-a27b-03ef8e6639a2
在 message=ServerMessage[messageID=962,durable=true,userID=null,priority=0,bodySize=512,timestamp=0,expiration=0,durable=true,address=testEndpoint 上找不到地址=testEndpoint 的任何绑定,properties=TypedProperties[mqtt.message.retain=true,mqtt.qos.level=1]]@749653273
Message ServerMessage[messageID=962,durable=true,userID=null,priority=0, bodySize=512, timestamp=0,expiration=0,durable=true, address=testEndpoint,properties=TypedProperties[mqtt.message.retain=true ,mqtt.qos.level=1]]@749653273 不会去任何地方,因为它没有绑定地址:testEndpoint
QueueImpl[name=$sys.mqtt.retain.testEndpoint, postOffice=PostOfficeImpl [server=ActiveMQServerImpl::serverUUID=c58c74d5-ea71-11e7-9621-a434d929f4aa]]@6ff93fb4 正在交付。消息参考=0
所以看起来我在某处缺少一些绑定,但我找不到它会是什么。有人有什么想法吗?
jakarta-ee - ActiveMQ Artemis:一个生产者和两个消费者,只有一个消费者收到消息(大部分时间),为什么?
我有这个,一个生产者,两个消费者,都是同一个队列。有时consumer0和consumer1确实可以连续接收消息,但大多数时候只有consumer0接收到一半的消息,consumer1总是收到空值。为什么会这样,或者是否有任何设置错误。(在一台窗口机器上,两个代理在两个 cmd 上运行。第三个 cmd 是打 mvn spring-boot:run)
推到https://github.com/ren2046/artemis看看有没有人可以帮忙?
log4j2 - 长时间不活动后出现 JMS appender 会话错误
我们使用 JMS appender 写入 JBoss EAP7 ActiveMQ。如果一段时间内没有记录活动(此时不确定持续时间 - 至少几个小时),则会出现此错误:
发生处理 Appender HIFauditAppender org.apache.logging.log4j.core.appender.AppenderLoggingException: javax.jms.IllegalStateException: Session is closed
这是附加程序配置:
我会假设 log4j2 会重新尝试获取新会话。
java - 无法让 STOMP 接受器在 Wildfly Swarm 中运行
我正在尝试在基于 Wildfly 11 的 Swarm 部署中设置一个 STOMP 接受器(使用 Swarm 2017.12.1 生成一个胖 WAR,通过 运行java -jar...
),让客户端向我发送进度消息,但无法让接受器加载,服务器启动时总是出现这个错误:
AMQ222203:类路径缺少协议 STOMP 的协议管理器,接受器 TransportConfiguration 上的协议被忽略(名称=stomp-acceptor,工厂=org-apache-activemq-artemis-core-remoting-impl-netty-NettyAcceptorFactory)?port=61613&protocols=跺脚
我正在使用现有的(但经过调整的)standalone-full.xml
配置来简化切换,到目前为止一切正常(Java EE 方面),但不是 STOMP 部分(不过 JMS 可以工作)。
我在 WAR 的 POM 中包含了一些依赖项来修复以前的类加载错误,但现在我已经没有想法了:
(所以我依靠 Swarm 来找出所需的片段,这适用于其余部分)
我的消息部分配置如下所示:
我搜索了 Swarm、Artemis 和 SO,但没有找到可行的解决方案。会不会因为 Wildfly 11 使用的是 Artemis 1.5 而 Swarm 还不完全支持它,所以它无法工作?
到目前为止我发现一些有用的资源:
- Wildfly-Swarm 和通过资源适配器连接到外部 activemq:WFLYCTL0412
- Wildfly 11 连接到远程 Artemis ActiveMQ 服务器配置
- https://blog.dekstroza.io/wildfly-swarm-to-remote-wildfly-swarm-activemq-broker/
- 使用 Wildlfy 11 嵌入式 Apache Artemis 接收 MQTT 消息
- http://docs.wildfly-swarm.io/2017.12.1/#_messaging
- http://docs.wildfly-swarm.io/2017.12.1/#_sockets
jms - 对主题列表的 activemq-artemis 管理消息请求没有响应
我正在开发一个以前使用 OpenMQ 作为 JMS 提供程序的 java 服务程序,但我正在将其转换为使用 activemq-artemis。
我需要从 artemis 获取现有主题/队列的列表。到目前为止,我有下面的代码,这些代码是根据 artemis 附带的示例以及我在网上找到的一些其他代码示例开发的(不包括 try/catch):
遍历调试器中的每一行,代码一直有效,直到最后的 requestor.request() 方法调用。调用此之后,似乎是线程黑洞。调试器没有进入下一行,catch 块没有启动,artemis.log 没有记录任何类型的错误。如果我在 putAttribute 调用中使用字符串 queueNames,我会得到相同的结果。
我的代码有问题吗,或者有人可以让我了解可能发生的事情吗?
其他详细信息:artemis 服务器 2.1.0 和客户端代码在单个开发机器 JDK7u65 上本地运行,在此项目之外使用测试代码我可以发布和使用与 artemis 之间的简单消息。
谢谢。