Ich versuche, ein ActiveMQ-Thema von einer .NET-Anwendung zu abonnieren, und hier unten ist mein Code (ich benutze Apache NMS 1.7.0):Apache NMS unter .NET schlägt Verbindung zu ActiveMQ fehl [Kanal war zu lange inaktiv]
using Apache.NMS;
using Apache.NMS.ActiveMQ;
...
public void Start()
{
try {
// connect to ActiveMQ
long timestamp = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond;
string providerUrl = String.Format("tcp://{0}:{1}", Host, Port);
IConnectionFactory connectionFactory = new ConnectionFactory(providerUrl);
connection = connectionFactory.CreateConnection(); // fails here
connection.ClientId = String.Format("{0}/{1}/{2}", AssemblyInfo.Title, Username, timestamp);
connection.Start();
// create consumer and register callback for incoming messages
ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge);
IMessageConsumer messageConsumer = session.CreateConsumer(
new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic(TopicName), MessageSelector, false
);
messageConsumer.Listener += new MessageListener(OnMessage);
} catch (Exception e) {
_.Logger.Error(Resources.ErrorStartingConsumer, e.Message);
}
}
public void OnMessage(IMessage message)
{
if (!(message is ITextMessage)) {
// 'message' is not a text message
_.Logger.Warn(Resources.SkippedMessage, message.NMSMessageId);
} else {
string textMessage = (message as ITextMessage).Text;
foreach (string acceptedProtocol in AcceptedProtocols) {
if (textMessage.StartsWith(acceptedProtocol + ":")) {
// process message here
return;
}
}
// the url contained in 'message' is not supported
_.Logger.Warn(Resources.SkippedMessage, message.NMSMessageId);
}
}
Der obige Code kompiliert erfolgreich ... aber der Versuch, eine Verbindung mit dem ActiveMQ-Server herzustellen, schlägt fehl. Hier unten ist die Aussage, dass ...
connection = connectionFactory.CreateConnection();
... und hier ist die Fehlermeldung fehlschlägt:
Channel was inactive for too long: tcp://172.16.126.194:61615
Ich bin ein wenig verwirrt, da ich diese Fehlermeldung erhalten, selbst wenn es das erste ist Zeit, die mein Client versucht, den ActiveMQ-Server zu verbinden.
Ich habe auch versucht, wireformat.maxinactivityduration=0
einzustellen, aber keine Möglichkeit. Jede Hilfe würde wirklich geschätzt werden.
Klingt, als ob Sie keine Verbindung zu einem Broker herstellen, sind Sie sicher, dass es einen Live-Broker auf diesem Port gibt und nicht etwas anderes. –
Ja, 'telnet 172.16.126.194 61615' funktioniert wie erwartet. Darüber hinaus kann ich mit einem Java-Producer Inhalte zum Thema hinzufügen. – j3d
Was ist die brokerseitige Konfiguration für diesen Port, d. H. Den TransportConnector. Wirklich nicht genug, um hier zu helfen –