.net 使用Apache.NMS控制台应用程序和Windows窗体的生成器消息

bz4sfanl  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(172)

我第一次尝试向ActiveMQ Artemis队列生成消息和从ActiveMQ Artemis队列使用消息。当我在C#控制台应用程序中使用代码时,我能够通过Apache.NMS.ActiveMQ以及Apache.NMS.AMQP连接和生成消息。但是,当我将相同的代码放入C# Windows窗体应用程序时,CreateSession方法调用将永远运行。

IConnectionFactory factory = new ConnectionFactory(brokerUri);
using (IConnection connection = factory.CreateConnection(username, password))
{
    using (ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
    {
        IDestination destination = session.GetQueue(queueName);
        IMessageProducer producer = session.CreateProducer(destination);
        IMessage textMessage = session.CreateTextMessage(text);
        producer.Send(textMessage);
    }
}

我的代理使用SSL,并且我将Apache.NMS.ActiveMQ库与brokerUri="ssl://mybroker:443"一起使用,将Apache.NMS.AMQP与brokerUri="amqps://mybroker:443"一起使用。同样,当在控制台应用程序中运行时,这两个库中的每一个都可以正常工作,但在Windows窗体应用程序中则不行。

ctehm74n

ctehm74n1#

对于tl;dr人群:
我们在AMQ 6和AMQ 7中遇到过这个问题。在jira问题和上面的注解中提到的解决方法是将任何AMQ连接代码 Package 在一个任务中。

System.Threading.Tasks.Task.Run(() =>{
    connnection.Start();
});

相关问题