JMS 애플리케이션 연결 - Amazon MQ

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

JMS 애플리케이션 연결

이 자습서에서는 RabbitMQ Amazon MQ RabbitMQ 브로커에 연결하는 방법을 보여줍니다. 메시지를 보낼 생산자와 RabbitMQ 대기열에서 메시지를 받을 소비자를 생성하는 방법을 알아봅니다.

시작하기 전에 Maven 프로젝트에 적절한 RabbitMQ JMS 종속성을 추가합니다.

JMS 1.1 및 2.0의 경우:

<dependencies> <dependency> <groupId>com.rabbitmq.jms</groupId> <artifactId>rabbitmq-jms</artifactId> <version>2.12.0</version> </dependency> </dependencies>

JMS 3.1의 경우:

<dependencies> <dependency> <groupId>com.rabbitmq.jms</groupId> <artifactId>rabbitmq-jms</artifactId> <version>3.5.0</version> </dependency> </dependencies>

생산자 생성

다음 코드 예제에서는 JMS를 사용하여 RabbitMQ 대기열에 쓰는 방법을 보여줍니다.

import jakarta.jms.*; import com.rabbitmq.jms.admin.*; // Setting the connection factory RMQConnectionFactory factory = new RMQConnectionFactory(); factory.setHost(envProps.getProperty("RABBITMQ_HOST", "localhost")); factory.setPort(Integer.parseInt(envProps.getProperty("RABBITMQ_PORT", "5672"))); factory.setUsername(envProps.getProperty("RABBITMQ_USERNAME", "guest")); factory.setPassword(envProps.getProperty("RABBITMQ_PASSWORD", "guest")); factory.setVirtualHost(envProps.getProperty("RABBITMQ_VIRTUAL_HOST", "/")); factory.useSslProtocol(); connection = factory.createConnection(); connection.start(); String queueName = "test-queue-jms"; Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); RMQDestination destination = new RMQDestination(queueName, true, false); // Send the message to the queue MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.PERSISTENT); String msg_content = "Hello World!!"; TextMessage textMessage = session.createTextMessage(msg_content); producer.send(textMessage); System.out.printf("Published to AMQP queue '%s': %s", queueName, msg_content);

소비자 생성

다음 코드 예제에서는 JMS를 사용하여 RabbitMQ 대기열에서 읽는 방법을 보여줍니다.

import jakarta.jms.*; import com.rabbitmq.jms.admin.*; // Setting the connection factory RMQConnectionFactory factory = new RMQConnectionFactory(); factory.setHost(envProps.getProperty("RABBITMQ_HOST", "localhost")); factory.setPort(Integer.parseInt(envProps.getProperty("RABBITMQ_PORT", "5672"))); factory.setUsername(envProps.getProperty("RABBITMQ_USERNAME", "guest")); factory.setPassword(envProps.getProperty("RABBITMQ_PASSWORD", "guest")); factory.setVirtualHost(envProps.getProperty("RABBITMQ_VIRTUAL_HOST", "/")); factory.useSslProtocol(); // Establish the connection and session jakarta.jms.Connection connection = factory.createConnection(); String queueName = "test-queue-jms"; Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); RMQDestination destination = new RMQDestination(); destination.setDestinationName(queueName); destination.setAmqp(true); destination.setAmqpQueueName(queueName); // Initialize consumer MessageConsumer consumer = session.createConsumer(destination); consumer.setMessageListener(message -> { try { if (message instanceof TextMessage) { TextMessage textMessage = (TextMessage) message; System.out.printf("Message: %s%n", textMessage.getText()); } else if (message instanceof BytesMessage) { BytesMessage bytesMessage = (BytesMessage) message; byte[] bytes = new byte[(int) bytesMessage.getBodyLength()]; bytesMessage.readBytes(bytes); String content = new String(bytes); System.out.printf("Message: %s%n", content); } else { System.out.printf("Message: [%s]%n", message.getClass().getSimpleName()); } } catch (JMSException e) { System.err.printf("Error processing message: %s%n", e.getMessage()); } }); connection.start();