Ich versuche, Nachrichten in/aus einer Rabbit MQ (3.6.5) Warteschlange mit dem STOMP-Protokoll zu lesen und zu schreiben. Ich verwende Apache NMS Stomp (1.5.4) als Client-Bibliothek.Conenct zu RabbitMQ mit Apache NMS STOMP
Beim Senden einer Nachricht mit NMS bekomme ich die folgende Ausnahme:
Eingabe-Zeichenfolge hatte kein richtiges Format.
Die Gründe dafür sind, dass NMS erwartet, dass das Feld message-id eine Nummer an einer bestimmten Position enthält. Diese
ist der Code von der NMS-Bibliothek:
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);
}
Die Nachricht-ID-Feld durch das Kaninchen gesendet MQ Broker den folgenden Wert hat: „T_ID: fig-52033-636066062974737556-1: 0: 1 : 1 @@ session-lOnNy1WnMfOTxEEVQmLHgg @@ 1"
NMS versucht zu konvertieren "1 @@ session-Bo6HXXTZFSh51Qy7X4wx9A @@ 1" zu einem Int64.
Das ist mein Client-Code:
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);
}
}
}
Gibt es eine Lösung für dieses Problem?
- Eine Möglichkeit, NMS so zu konfigurieren, dass die ID anders gehandhabt wird?
- Eine Möglichkeit, Rabbit MQ anzuweisen, andere Nachrichten-IDs zu generieren?