我有一个.NETcore应用程序/客户机,它有几个定义好的端点从代理获取数据。一个终点是获取所有地址的列表,但当我运行它时,它会返回一个空的响应。我们正在使用amq7。为了利用Artemis,需要重构C#代码吗?如何使用.NET在Artemis中获得代理/队列度量?下面是我们从ActiveMQ NMS网站上使用的代码示例
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.");
}发布于 2022-06-03 21:45:51
默认的broker.xml禁用咨询支持,例如:
<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这样的解决方案集成。
https://stackoverflow.com/questions/72494769
复制相似问题