Я пытаюсь читать и записывать сообщения в/из очереди MQ (3.6.5) с использованием протокола STOMP. Я использую Apache NMS Stomp (1.5.4) в качестве клиентской библиотеки.Conenct to RabbitMQ с использованием Apache NMS STOMP
При отправке сообщения с использованием NMS я получаю следующее исключение:
Строка ввода не была в правильном формате.
Причины этого в том, что NMS ожидает, что поданный message-id содержит номер в определенной позиции.
Это код из библиотеки NMS:
public void SetValue(String messageKey)
{
key = messageKey;
// Parse off the sequenceId
var p = messageKey.LastIndexOf(":");
if (p >= 0)
{
ProducerSequenceId = Int64.Parse(messageKey.Substring(p + 1));
messageKey = messageKey.Substring(0, p);
}
ProducerId = new ProducerId(messageKey);
}
В поле Идентификатор сообщения посылается Rabbit MQ-Брокер имеет следующее значение: «T_ID: рис-52033-636066062974737556-1: 0: 1 : 1 @@ сеанс lOnNy1WnMfOTxEEVQmLHgg @@ 1"
NMS пытается преобразовать "1 @@ сеанс Bo6HXXTZFSh51Qy7X4wx9A @@ 1" к Int64.
Это мой код клиента:
var connecturi = new Uri("stomp:tcp://localhost:61613?transport.useInactivityMonitor=false&trace=true");
Console.WriteLine("About to connect to " + connecturi);
IConnectionFactory factory = new NMSConnectionFactory(connecturi);
using (var connection = factory.CreateConnection("XXXX", "XXXX"))
using (var session = connection.CreateSession())
{
connection.Start();
var destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
Console.WriteLine("Using destination: " + destination);
// Create a consumer and producer
using (var consumer = session.CreateConsumer(destination))
using (var producer = session.CreateProducer(destination))
{
// Start the connection so that messages will be processed.
producer.DeliveryMode = MsgDeliveryMode.Persistent;
// Send a message
var request = session.CreateTextMessage("Hello World! FROM NMS");
producer.Send(request);
// Consume a message
var message = consumer.Receive() as ITextMessage;
if (message == null)
{
Console.WriteLine("No message received!");
}
else
{
Console.WriteLine("Received message with ID: " + message.NMSMessageId);
Console.WriteLine("Received message with text: " + message.Text);
}
}
}
Есть ли решение этой проблемы?
- Способ настройки NMS для обработки идентификатора по-разному?
- Способ сказать Кролик MQ генерировать другие сообщения-идентификаторы?