首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveMQ Artemis支持从ActiveMQ.Advisory.Queue获取消息吗?

ActiveMQ Artemis支持从ActiveMQ.Advisory.Queue获取消息吗?
EN

Stack Overflow用户
提问于 2022-06-03 20:17:50
回答 1查看 173关注 0票数 0

我有一个.NETcore应用程序/客户机,它有几个定义好的端点从代理获取数据。一个终点是获取所有地址的列表,但当我运行它时,它会返回一个空的响应。我们正在使用amq7。为了利用Artemis,需要重构C#代码吗?如何使用.NET在Artemis中获得代理/队列度量?下面是我们从ActiveMQ NMS网站上使用的代码示例

代码语言:javascript
复制
using System;
using Apache.NMS;
using Apache.NMS.Util;
using Apache.NMS.ActiveMQ;
using Apache.NMS.ActiveMQ.Commands;

namespace AdvisoryExample
{
    class AdvisoryExample
    {
        private IConnection connection;
        private ISession session;

        public const String QUEUE\_ADVISORY\_DESTINATION = "ActiveMQ.Advisory.Queue";
        public const String TOPIC\_ADVISORY\_DESTINATION = "ActiveMQ.Advisory.Topic";
        public const String TEMPQUEUE\_ADVISORY\_DESTINATION = "ActiveMQ.Advisory.TempQueue";
        public const String TEMPTOPIC\_ADVISORY\_DESTINATION = "ActiveMQ.Advisory.TempTopic";

        public const String ALLDEST\_ADVISORY\_DESTINATION = QUEUE\_ADVISORY\_DESTINATION + "," +
                                                           TOPIC\_ADVISORY\_DESTINATION + "," +
                                                           TEMPQUEUE\_ADVISORY\_DESTINATION + "," +
                                                           TEMPTOPIC\_ADVISORY\_DESTINATION;

        AdvisoryExample()
        {
            IConnectionFactory factory = new ConnectionFactory();

            connection = factory.CreateConnection();
            connection.Start();
            session = connection.CreateSession();
        }

        void EnumerateQueues()
        {
            Console.WriteLine("Listing all Queues on Broker:");

            IDestination dest = session.GetTopic(QUEUE\_ADVISORY\_DESTINATION);

            using(IMessageConsumer consumer = session.CreateConsumer(dest))
            {
                IMessage advisory;

                while((advisory = consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)
                {
                    ActiveMQMessage amqMsg = advisory as ActiveMQMessage;

                    if(amqMsg.DataStructure != null)
                    {
                        DestinationInfo info = amqMsg.DataStructure as DestinationInfo;
                        if(info != null)
                        {
                            Console.WriteLine("   Queue: " + info.Destination.ToString() );
                        }
                    }
                }
            }
            Console.WriteLine("Listing Complete.");
        }
EN

回答 1

Stack Overflow用户

发布于 2022-06-03 21:45:51

默认的broker.xml禁用咨询支持,例如:

代码语言:javascript
复制
<acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;amqpMinLargeMessageSize=102400;protocols=CORE,AMQP,STOMP,HORNETQ,MQTT,OPENWIRE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300;amqpDuplicateDetection=true;supportAdvisory=false;suppressInternalManagementObjects=false</acceptor>

关键参数是supportAdvisory=false,您可以在文献资料中更多地了解它。您可以设置supportAdvisory=true或完全忽略它,此时您应该能够使用来自客户端的建议。

关于获取代理/队列度量的其他方法,ActiveMQ Artemis支持多种不同的方法来访问这些数据(例如,JMX、通过Jolokia的HTTP、管理消息、web控制台、CLI工具)。您可以在文献资料中阅读更多有关这方面的内容。代理还支持通过插件导出度量,因此您可以使用与Prometheus这样的解决方案集成

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72494769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档