标签: apache-nms

.Net NMS.ActiveMQ应该存储消息发送调用之间的会话和连接

我刚开始使用ActiveMQ并得到了几个问题.

我应该使用ActiveMQ发送消息

我现在做了什么:

public class ActiveMQSender
{
    private readonly Uri connectionUri;
    private readonly IConnectionFactory connectionFactory;

    private readonly string destinationName;

    public ActiveMQSender()
    {
        this.connectionUri = new Uri("activemq:tcp://localhost:61616");
        this.connectionFactory = new NMSConnectionFactory(this.connectionUri);
        this.destinationName = "queue://testQ";
    }

    public void Send(string msg)
    {
        using (var connection = this.connectionFactory.CreateConnection())
        using (var session = connection.CreateSession())
        {
            var destination = SessionUtil.GetDestination(session, this.destinationName);

            using (var producer = session.CreateProducer(destination))
            {
                connection.Start();
                var message = session.CreateTextMessage(msg);
                producer.Send(message);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个类中只有一个实例将作为构造函数参数注入.

我担心连接,会话和生成器创建的开销,因为消息将被频繁发送(通常每10秒发送一条消息)我应该重用连接,会话或生成器实例,以及我应该如何应对连接失败?这种情况下的常见模式是什么?

.net c# activemq-classic apache-nms

5
推荐指数
1
解决办法
1584
查看次数

如何使用Apache.NMS API以编程方式清除ActiveMQ队列?

我需要能够使用Apache.NMS(C#)以编程方式清除队列.我一直在查看NMS API,但看不到这样的功能.它存在吗?

activemq-classic nms apache-nms

4
推荐指数
1
解决办法
2092
查看次数

ActiveMQ NMS:当代理关闭时,connection.start()与故障转移协议挂起

我有使用nms.activemq 1.5.0的C#应用​​程序.

当我的应用程序启动时,它尝试使用故障转移协议连接到代理(我在主从配置中有两个代理).
如果我的应用程序中的两个经纪人都因为等待而陷入等待connection.start().
我尝试了在网上找到的每一点信息 - 我尝试了故障转移协议的每个属性,也试过设置连接超时,尝试过transport.requesttimeout.

我也尝试过更新版本的nms.activemq,但似乎没有解决问题.

什么可以导致这个问题或任何解决方法?

activemq-classic nms apache-nms

3
推荐指数
1
解决办法
3708
查看次数

.NET中的ActiveMQ连接启动超时

我有ActiveMQ的.Net客户端。我正在使用Apache.NMS 1.5.1.2739和Apache.NMS.ActiveMQ 1.5.6.2746

我使用以下代码连接到代理:

var connectionFactory = new ConnectionFactory("failover:tcp://127.0.0.1:61616/?transport.timeout=5000");
IConnection connection = connectionFactory.CreateConnection();
connection.Start();
Run Code Online (Sandbox Code Playgroud)

问题是当没有可用的ActiveMQ代理时,connection.Start()将永远挂起。因此,transport.timeout在这里没有帮助。我想Start()方法超时。因此,在这段时间之后,发生异常,执行可能会继续进行。如何避免这样的问题?

.net activemq-classic nms apache-nms

3
推荐指数
1
解决办法
1646
查看次数

带有C#和Apache NMS的ActiveMQ - 计算队列中的消息

我正在使用ActiveMQ使用C#应用程序发送和接收消息.但是我在队列中计算消息时遇到了一些困难.这是我的代码:

    public int GetMessageCount()
    {
        int messageCount = 0;
        Uri connecturi = new Uri(this.ActiveMQUri);

        IConnectionFactory factory = new NMSConnectionFactory(connecturi);

        using (IConnection connection = factory.CreateConnection())
        using (ISession session = connection.CreateSession())
        {
            IDestination requestDestination = SessionUtil.GetDestination(session, this.QueueRequestUri);

            IQueueBrowser queueBrowser = session.CreateBrowser((IQueue)requestDestination);
            IEnumerator messages = queueBrowser.GetEnumerator();

            while(messages.MoveNext())
            {
                messageCount++;
            }

            connection.Close();
            session.Close();
            connection.Close();
        }

        return messageCount;
    }
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用QueueBrowser来获取计数,但它返回的IEnumerator总是为空.我从这个页面得到了使用QueueBrowser的想法,但也许还有另一种方法我应该这样做?

更新:

我通过枚举器找到的"无限循环"问题的解决方案是通过访问当前消息来解决的.它现在只经过一次循环(这是正确的,因为队列中只有一条消息).

新的while循环是:

while(messages.MoveNext())
{
    IMessage message = (IMessage)messages.Current;
    messageCount++;
}
Run Code Online (Sandbox Code Playgroud)

c# activemq-classic message-queue apache-nms

2
推荐指数
1
解决办法
4779
查看次数

为什么我的流被同行关闭?

我有以下控制台程序,用于侦听 ActiveMQ Stomp 服务器上的目标(队列或主题,这并不重要),并简单地将收到的消息记录到控制台:

\n\n
using System;\nusing Apache.NMS.Stomp;\nusing Apache.NMS;\nusing Apache.NMS.Util;\n\nnamespace StompTest\n{\n    class Program\n    {\n        static void Main(string[] args)\n        {\n            try\n            {\n                var connectionFactory = new ConnectionFactory("stomp:tcp://mybroker:61613");\n\n                var connection = connectionFactory.CreateConnection();\n                connection.ExceptionListener += new ExceptionListener(connection_ExceptionListener);\n                connection.Start();\n\n                var session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);\n\n                IDestination dest = SessionUtil.GetDestination(session, "queue://MyQueue");\n\n                var consumer = session.CreateConsumer(dest);\n                consumer.Listener += new MessageListener(consumer_Listener);\n\n                Console.ReadKey();\n            }\n            catch (NMSException ex)\n            {\n                Console.WriteLine("NMSException !! ==> " + ex.Message);\n            }\n        }\n\n        static void connection_ExceptionListener(Exception exception)\n        {\n            Console.WriteLine("Exception!! ==> " + exception.ToString());\n        }\n\n        static void consumer_Listener(IMessage …
Run Code Online (Sandbox Code Playgroud)

.net c# stomp nms apache-nms

0
推荐指数
1
解决办法
2878
查看次数

标签 统计

apache-nms ×6

activemq-classic ×5

nms ×4

.net ×3

c# ×3

message-queue ×1

stomp ×1