问题标签 [artemiscloud]

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.

0 投票
1 回答
6104 浏览

kubernetes - 如何在 Kubernetes 中使用 Apache ActiveMQ Artemis

我有一个问题,我在 Kubernetes 中有一个包含 Apache ActiveMQ Artemis 代理的工作负载。当我的工作负载中有一个 pod 时服务器正常启动,当我尝试扩展它们时问题就开始了。Pod 中的代理无法相互连接,因此我无法扩展我的工作负载。我的最终目标是使其可扩展。我在本地使用两个 docker 容器进行了尝试,效果很好。

这是我的broker.xml

编辑:附加的 kubernetes,docker configs

部署.yml

Dockerfile

运行.sh

0 投票
1 回答
321 浏览

activemq-artemis - AMQ212037:FROM Artemis 2.15.0 中的连接失败

在没有任何更改的情况下,我们在集群的三个节点之一中收到了以下问题。该节点在此问题后离开了集群,并且客户端在此问题后无法连接到集群。

AMQ212037:检测到与 /172.50.45.19:40266 的连接失败:readAddress(..) 失败:对等方重置连接 [code=GENERIC_EXCEPTION]

使用的图像 -vromero/activemq-artemis:2.15.0

0 投票
1 回答
623 浏览

kubernetes - ActiveMQ Artemis 消费者在崩溃后没有重新连接到同一个集群节点

我正在 Kubernetes 中建立一个 Artemis 集群,其中包含 3 组主/从:

Artemis 版本是 2.17.0。这是我在 master-0 中的集群配置broker.xml。除了connector-ref更改为匹配代理之外,其他代理的配置相同:

我的消费者在 Spring Boot 应用程序中被定义为 a JmsListener。在消费队列中的消息期间,Spring Boot 应用程序崩溃,导致 kubernetes 删除 pod 并重新创建一个新的。但是,我注意到新的 pod 没有连接到同一个 Artemis 节点,因此之前连接的剩余消息从未被消耗掉。

我认为使用集群的全部意义在于让所有 Artemis 节点作为一个单元向消费者传递消息,而不管它连接到哪个节点。我错了吗?如果集群无法将消费者连接重新路由到正确的节点(该节点保存来自先前消费者的剩余消息),那么处理这种情况的推荐方法是什么?

0 投票
0 回答
87 浏览

kubernetes - ActiveMQ Artemis 在通配符队列更改目标上重新分配消息

我在 Kubernetes 中设置了一个由 3 个主/从 Artemis 2.17.0 组成的集群,配置如下:

我正在使用 JmsTemplate 将消息发送到名为QUEUE.service2.12345.notification的队列,并使用 JmsListener 来使用通配符队列QUEUE.*.*.notification中的消息。我注意到来自通配符队列QUEUE.*.*.notification的消息的目标字段与非通配符队列QUEUE.service2.12345.notification中相应消息的目的地保持相同,这对我有好处因为我需要原始目的地的信息。但是,我面临两个问题:

  1. QUEUE.service2.12345.notification中的消息永远不会被确认或删除,尽管通配符队列QUEUE.*.*.notification中的相应消息被正确使用、确认和删除。如何配置QUEUE.service2.12345.notification以在将消息重新路由到通配符队列后自动删除它们?
  2. 如果消费者死亡并重新连接到 Artemis 集群,很有可能它会重新连接到不同的 Artemis 节点,因此消息重新分发将开始。然而,与在同一个 Artemis 节点内路由到通配符队列不同,这次消息的目的地是被覆盖为通配符队列(QUEUE.*.*.notification)。为什么通配符重新路由在这种情况下表现不同?无论如何我可以告诉阿尔忒弥斯保留原来的目的地吗?
0 投票
1 回答
1011 浏览

kubernetes - ActiveMQ Artemis 集群在一个实例崩溃后不会重新分发消息

我在 Kubernetes 中有一个 Artemis 集群,有 3 组主/从:

我正在使用 Spring boot JmsListener 来使用发送到通配符队列的消息,如下所示。

有 20 条消息发送到队列,master-1 是传递节点。当 5 条消息被消耗时,我杀死了 master-1 节点以模拟崩溃,我看到 slave-1 开始运行,然后在 Kubernetes 重新启动它后返回给 master-1。监听器抛出JMSException连接丢失并尝试重新连接。然后我看到它成功连接到master-0(我看到创建的队列和消费者计数> 0)。然而,master-0 上的队列是空的,而 master-1 中的同一个队列仍然有 15 条消息,并且没有附加消费者。我等了一会儿,但 15 条消息从未送达。我不确定为什么没有重新分配。

master-1上的通配符队列在崩溃后重新上线时的属性是这样的(我手动替换了字段accessToken的值,因为它有敏感信息):

master-0上的通配符队列的属性是这样的:

使用的 Artemis 版本是 2.17.0。这是我在 master-0 中的集群配置broker.xml。除了connector-ref更改为匹配代理之外,其他代理的配置相同:

从 Stack Overflow 的另一个回答中,我了解到我的高可用性拓扑是多余的,我计划移除从属设备。但是,我不认为奴隶是重新分配消息不起作用的原因。是否有我缺少处理 Artemis 节点崩溃的配置?

更新 1:正如贾斯汀建议的那样,我尝试在没有 HA 的情况下使用由 2 个 Artemis 节点组成的集群。

以下是2 artemis节点的broker.xml。它们之间唯一不同的是节点名称和日志缓冲区超时:

使用此设置,我仍然得到相同的结果,在 artemis 节点崩溃和恢复后,剩余的消息没有移动到另一个节点。

更新 2 我尝试按照贾斯汀的建议使用非通配符队列,但仍然得到相同的行为。我注意到的一个不同之处是,如果我使用非通配符队列,消费者计数仅为 1,而在通配符队列的情况下为 3。这是崩溃后旧队列的属性

这是新队列的属性

0 投票
1 回答
1061 浏览

activemq-artemis - Docker 中的 ActiveMQ Artemis 显示空白屏幕

简洁版本

当我在 docker 中运行 ActiveMQ Artemis 时,我看到这个基本上是空的屏幕:

空屏

这看起来不对......我期待这个,就像我在使用 zip 文件时得到的那样:

正常的activemq屏幕

不管我是使用 docker 还是 zip 文件,输入什么用户名或密码都没有关系,我只是登录,这有点令人担忧......

我究竟做错了什么?

更长的版本

我正在尝试 ActiveMQ 的“Hello World”风格安装。听起来 ActiveMQ Artemis 是我应该使用的。我们将在 Kubernetes 上使用它,所以我找到并关注了https://artemiscloud.io/。有一个快速部署一个基本的容器镜像,它在首页上运行代理。它建议:

我将端口更改为-p8161:8161并使用 Docker for Windows 运行它。访问 http://localhost:8161/console/ 可以看到上面的第一个屏幕截图。

如果我改为从https://activemq.apache.org/components/artemis/download/下载并按照https://activemq.apache.org/components/artemis/documentation/latest/using-server.html我得到第二个截屏。

无论我使用 docker 还是 zip 文件,我输入的用户名或密码都无关紧要,无论如何我都会登录。

完整的 docker 控制台日志

0 投票
1 回答
362 浏览

docker - 在许多 Docker 容器上配置 ActiveMQ Artemis 集群?

我不知道我做错了什么。我正在尝试在 2 个 docker 容器上正确配置 ActiveMQ Artemis HA 集群,但我在日志中没有看到任何关于“备份服务器”等的信息。它似乎不起作用。我试图为集群制作一个简单的 Java 客户端,但它没有连接到它。请不要写“你读过文档吗”——因为是的,我已经读过了。从我的角度来看,主从之间似乎没有任何联系,但我不知道为什么。我已经用数据配置了 docker 环境:

Dockerfile:

docker-compose.yml

大师broker.xml

奴隶broker.xml

Java客户端的片段:

0 投票
1 回答
356 浏览

spring-boot - 在 Docker 上使用 Spring Boot 运行 ActiveMQ Artemis

我正在尝试使用 Spring Boot 和 Docker 部署 ActiveMQ Artemis。Artemis 加上 Spring Boot 工作正常。我spring-boot-maven-plugin用来生成一个胖罐子。当我尝试将该胖 jar 部署到 Docker 中时,我看到接受器已启动:

AMQ221020:在 localhost:61616 为协议启动 EPOLL 接受器 [CORE]

但我无法从 Docker 外部连接到它。

线程“主”ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=AMQ119013:等待接收集群拓扑超时。组:空]

我正在使用此命令将其运行到 Docker 中:

任何想法?

这里pom.xml

Spring启动配置文件:

SpringBootApplication 文件:

码头工人文件:

消费者代码:

我也有一个不同的设置暴露 OpenWire 并且我有相同的行为:没有 docker 可以正常工作,但不能使用 docker

0 投票
2 回答
80 浏览

python - 无法将 python 容器连接到 activeMQ Artemis 容器

我的最终目标是让运行不同进程的多个 Python 容器通过 ActiveMQ Artemis 容器相互通信。我对这一切都很陌生,所以作为开始,我只是想运行一个概念验证。

我按照这个 youtube 视频中的说明建立了我的阿尔忒弥斯形象,一切都很好。我还按照本教程开始通过 stomp 向 Artemis 发送消息。当我在 Artemis 容器启动并运行时在本地(从 PyCharm)运行此脚本时,我可以在 Web 控制台中看到从 python 脚本生成的新队列。但是,当我将相同的 Python 脚本容器化时,出现错误

我尝试在 docker 中建立一个网络并将两个容器都放在上面。我正在运行我的python容器

我有一种感觉,我错误地暴露了一个端口,或者类似的愚蠢的东西,但我对容器不太熟悉,不知道从哪里开始寻找。

0 投票
1 回答
209 浏览

kubernetes - ActiveMQ Artemis Kubernetes 多代理设置

我正在尝试在 Kubernetes 环境中设置 ActiveMQ Artemis 多代理设置。我能够在成功启用持久性的情况下运行单个 pod 部署。我使用了从官方 repo构建的 Artemis docker 镜像。

但是,如果我尝试设置附加相同持久性卷(共享 PV)的多 pod 部署,尽管部署了 pod,但一个 pod 会成功,而其他 pod 会崩溃,因为第一个 Artemis 容器已在目录上设置了文件锁定。所以我无法使用共享存储启动多个 pod。

我还尝试了 JGroups 和广播概念来创建集群,以便每个代理都有自己的存储,然后在内部与每个代理进行通信,但我无法成功配置它。

有没有人能够在 Kubernetes 中成功部署多代理 Artemis?如果每个 pod 都有自己的存储,则没有问题,但 Artemis 代理应该具有高可用性,并且代理应该像在集群中一样进行通信,这样我们就不会丢失消息。

如果任何人都可以分享有关如何实现这一目标的资源或步骤,那将非常有帮助。

编辑

这是我的 broker.xml 配置。

这是我使用的 jgroups.xml。

我使用此配置在 k8s 中设置多 pod 设置。我在 lib 文件夹中添加了相关的 Kube ping jar。虽然两个 pod 已启动,但当我尝试访问 Artemis UI 时,行为不一致。登录后,用户登陆要求添加连接的 UI 页面。有时即使在成功登录后,用户也会被重定向到登录页面。当只有一个代理时,用户通常不会获得 UI。我也没有看到任何错误日志。谁能推荐 kuberenetes 部署所需的代理 xml 更改?