Отправка сообщения в RabbitMQ с использованием JMS - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в RabbitMQ и пытаюсь отправить сообщение в RabbitMQ с помощью JMS. У меня есть следующая стандартная программа-производитель JMS:

public void sendMessage() {
    Context context = null;
    ConnectionFactory factory = null;
    Destination destination = null;
    Connection connection = null;
    Session session = null;
    MessageProducer producer = null;

    Properties initialProperties = new Properties();
    initialProperties.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
    initialProperties.put(InitialContext.PROVIDER_URL, "http-remoting://IP:PORT");
    initialProperties.put(Context.SECURITY_PRINCIPAL, "mquser");
    initialProperties.put(Context.SECURITY_CREDENTIALS, "Mquser@123");
    try {
        context = new InitialContext(initialProperties);
        factory = (QueueConnectionFactory) context.lookup("jms/RemoteConnectionFactory");

        System.out.println("Lookup Success");
        destination = (Destination) context.lookup("jms/queue/TestQueue");
        System.out.println("Queue lookup success");
        connection = factory.createConnection();
        session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        producer = session.createProducer(destination);

        String text = "8=FIX.4.49=7735=349=A56=B34=352=20200115-13:18:26.000 45=322222=D100208103222223=40558=Invalid FIX2ITFMsgType10=226";
        TextMessage textMessage = session.createTextMessage();
        textMessage.setText(text);
        connection.start();
        System.out.println("Going to send");
        producer.send(textMessage);
        System.out.println(this.getClass().getName() + "has sent a message : " + text);
    } catch (NamingException e) {
        e.printStackTrace();
    } catch (JMSException e) {
        e.printStackTrace();
    } finally {
        if (context != null) {
            try {
                context.close();
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (JMSException ex) {
                ex.printStackTrace();
            }
        }
    }
}

, которую я использую для отправки сообщения в ActiveMQ Artemis, встроенного в JBoss EAP 7.2. Как я нашел в по этой ссылке , я не смогу использовать вышеуказанную программу для отправки сообщения в RabbitMQ, но у него будут следующие параметры:

  1. Имя пользователя
  2. Пароль
  3. VirtualHost
  4. Хост
  5. Порт
  6. DestinationName
  7. ExchangeName
  8. QueueName
  9. RoutingKey

Может кто-нибудь привести пример стандартной программы для отправки сообщения в RabbitMQ. Я использую Spring Boot и также могу использовать его функции.

1 Ответ

1 голос
/ 01 февраля 2020

Spring Boot предоставляет шаблон RabbitTemplate, который облегчает отправку сообщений:

@Component
public class Example {

  private final RabbitTemplate rabbitTemplate;

  public Example(RabbitTemplate rabbitTemplate) {
      this.rabbitTemplate = rabbitTemplate;
  }

  @Override
  public void run(String... args) throws Exception {
       rabbitTemplate.convertAndSend(MessagingRabbitmqApplication.topicExchangeName, "foo.bar.baz", "Hello from RabbitMQ!");
  }

Пожалуйста, ознакомьтесь с руководством https://spring.io/guides/gs/messaging-rabbitmq/

Пожалуйста, также прочтите Spring Boot документация: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot -features-amqp

...