gpt4 book ai didi

c# - ActiveMQ - 将消息发送到使用字符串指定的临时队列(C# 中的 NMS)

转载 作者:行者123 更新时间:2023-11-30 15:45:57 27 4
gpt4 key购买 nike

我的系统中有一个同步消息事务,该过程大致遵循以下流程:

  1. “A 点”在消息代理上创建一个临时队列(“目的地 2”);
  2. 消息从 A 点发送到目的地 1(消息代理上的普通队列),ReplyTo 地址设置为目的地 2;
  3. A 点阻塞等待目的地 2 上的响应;
  4. B点收到目的地1的消息;
  5. B 点创建一个工作对象 - 其属性是目的地 2 的名称(使用 .ToString() 派生)。此工作对象被序列化并存储在 DB 中;

...

  1. 当满足某些参数时从数据库检索对象,发生更改,并将响应发送到目标 2 - 使用 SessionUtil 从作为工作对象的字符串属性存储的回复地址派生新的 IDestination 对象;
  2. “A 点”收到来自目的地 2 的消息并继续前进。

此过程可能需要几秒钟到几秒钟才能完成。

我需要使用返回目的地(目的地 2)的名称,而不是完整的 IDestination 对象,因为我必须序列化该对象并存储在数据库中。

如果我使用永久队列或主题作为目标 2,则该过程运行良好。但是,尝试使用临时队列的字符串名称创建它时总是失败。

没有错误,只是消息没有到达

有什么想法吗?

显示发送返回消息的示例代码:

IDestination myDestination = SessionUtil.GetDestination(stateSession, instance.ReplyTo, DestinationType.Queue);

stateConnection.Start();

using (IMessageProducer myProducer = stateSession.CreateProducer(myDestination))
{
myProducer.DeliveryMode = MsgDeliveryMode.NonPersistent;
var response = myProducer.CreateTextMessage();

response.NMSCorrelationID = instance.CorrelationID;
response.Properties["RoutingDestination"] = instance.RoutingOriginator;
response.Text = "Test Response";

try
{
myProducerBroadcast.Send(response);
myProducer.Send(response);

Log.InfoFormat("Sent response {0} to {1}", instance.UniqueId, instance.ReplyTo);
}
catch (Exception ex)
{
Log.Error("Unable to send execution update onwards", ex);
}
}

(“instance”是工作对象——包含ReplyTo地址等信息)

最佳答案

临时目的地只是暂时的。一旦创建临时目标的连接对象关闭,目标就会自动从代理中删除。出于这个原因,存储临时目标供以后使用并不是一个好主意。此外,只允许创建临时目标的连接在其上使用。

关于c# - ActiveMQ - 将消息发送到使用字符串指定的临时队列(C# 中的 NMS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4722022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com