Реализация шаблона очереди сообщений на C# с помощью System.Messaging

“шаблон:обмен сообщениями” относится к концепции использования шаблонов или методов обмена сообщениями при разработке программного обеспечения. Эти шаблоны обычно используются для облегчения связи и координации между различными компонентами или системами в распределенной или асинхронной среде. Вот несколько методов с примерами кода для реализации шаблонов обмена сообщениями:

  1. Шаблон публикации/подписки:

    • Описание. В этом шаблоне издатели публикуют сообщения по темам, а подписчики получают сообщения по интересующим их темам.
    • Пример кода (Python – с использованием библиотеки paho-mqtt):
      import paho.mqtt.client as mqtt
      def on_message(client, userdata, msg):
       print("Received message: " + msg.payload.decode())
      client = mqtt.Client()
      client.on_message = on_message
      client.connect("mqtt.example.com", 1883, 60)
      client.subscribe("topic/example")
      client.loop_forever()
  2. Шаблон запроса/ответа:

    • Описание. В этом шаблоне запрашивающая сторона отправляет сообщение с запросом, а отвечающая сторона отвечает ответным сообщением.
    • Пример кода (Java – с использованием API javax.jms):
      import javax.jms.*;
      public class Requestor {
       public static void main(String[] args) throws JMSException {
           ConnectionFactory connectionFactory = new com.sun.messaging.ConnectionFactory();
           Connection connection = connectionFactory.createConnection();
           Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
           Destination requestQueue = session.createQueue("requestQueue");
           Destination replyQueue = session.createQueue("replyQueue");
           MessageProducer producer = session.createProducer(requestQueue);
           MessageConsumer consumer = session.createConsumer(replyQueue);
           TextMessage requestMessage = session.createTextMessage("Hello, server!");
           requestMessage.setJMSReplyTo(replyQueue);
           producer.send(requestMessage);
           Message replyMessage = consumer.receive();
           if (replyMessage instanceof TextMessage) {
               TextMessage textMessage = (TextMessage) replyMessage;
               System.out.println("Received reply: " + textMessage.getText());
           }
           connection.close();
       }
      }
  3. Шаблон очереди сообщений:

    • Описание. Этот шаблон предполагает отправку и получение сообщений через очередь сообщений, которая действует как буфер между отправителями и получателями.
    • Пример кода (C# – использование пространства имен System.Messaging):
      using System.Messaging;
      public class MessageQueueExample {
       public static void Main() {
           MessageQueue queue = new MessageQueue(".\\Private$\\MyQueue");
           Message message = new Message("Hello, queue!");
           queue.Send(message);
           Message receivedMessage = queue.Receive();
           string messageBody = receivedMessage.Body.ToString();
           Console.WriteLine("Received message: " + messageBody);
       }
      }