本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
連接您的 JMS 應用程式
本教學課程說明如何使用 RabbitMQ JMS 用戶端將 JMS 應用程式連線至 Amazon MQ for RabbitMQ 代理程式。您將了解如何建立生產者以傳送訊息,以及建立取用者以接收來自 RabbitMQ 佇列的訊息。
開始之前,請將適當的 RabbitMQ JMS 相依性新增至 Maven 專案:
對於 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();