Как использовать соединение SslStream для связи ActiveMQ - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу установить соединение с сервером и установить связь с ActiveMQ, работающим на этом сервере. Я беру код из MSDN:

TcpClient client = new TcpClient(machineName, port); // ActiveMQ is running on that port on the server
Console.WriteLine("Client connected.");
SslStream sslStream = new SslStream(
    client.GetStream(),
    false,
    new RemoteCertificateValidationCallback(ValidateServerCertificate),
    null
    );
try
{
    sslStream.AuthenticateAsClient(machineName, certificates, SslProtocols.Tls, true);
}
catch (AuthenticationException e)
{
    Console.WriteLine("Exception: {0}", e.Message);
    if (e.InnerException != null)
    {
        Console.WriteLine("Inner exception: {0}", e.InnerException.Message);
    }
    Console.WriteLine("Authentication failed - closing the connection.");
    client.Close();
    return;
}

и могу установить соединение.Я отправляю запрос на сервер:

byte[] messsage = Encoding.UTF8.GetBytes("Hello from the client.<EOF>");
// Send hello message to the server. 
sslStream.Write(messsage);
sslStream.Flush();
// Read message from the server.
string serverMessage = ReadMessage(sslStream);
Console.WriteLine("Server says: {0}", serverMessage);

В ответе сервер говорит:

? ActiveMQ y TcpNoDelayEnabled SizePrefixDisabled CacheSize ProviderName ActiveMQ StackTraceEnabled PlatformDetails TJV2: 1.8.0_1.202: 1.8.0b08, Oracle Corporation, OS: Windows Server

Итак, это означает, что связь с сервером AMQ установлена.У меня вопрос, как теперь я могу использовать этот канал AMQ для отправки и получения сообщений?Обычно я должен указать очередь сообщений, которую я хочу использовать.Как и где я должен это сделать?Должно ли это быть в сообщении, которое я отправляю на сервер?Примерно так:

string message_queue = "test.message.tosend";
byte[] request = Encoding.UTF8.GetBytes(String.Format(<formatted queue name with message content>, machineName));

Пример кода будет очень признателен.

1 Ответ

1 голос
/ 25 сентября 2019

ActiveMQ - это брокер сообщений, который поддерживает множество различных протоколов обмена сообщениями (например, OpenWire, AMQP 1.0, STOMP и MQTT).Каждый из этих протоколов аналогичен тем, что они поддерживают обмен сообщениями между клиентом и брокером, но отличаются друг от друга тем, какие конкретные функции они поддерживают, их протоколом квитирования, форматами проводов и т. Д.

По любой причинеВы не используете ни одну из реализаций клиента для этих протоколов.Вы используете низкий уровень TcpClient , что означает, что вам нужно найти спецификацию для протокола, который вы хотите говорить (например, AMPQ 1.0 , STOMP 1.2 )и реализовать клиент для этого.В зависимости от выбранного вами протокола, это может быть значительный объем работы.

Однако вместо переопределения клиента вы можете использовать уже существующий, например:

...