Пример использования Yandex Message Queue на JMS
Статья создана
Обновлена 24 апреля 2024 г.
JMS
Установка
Установите SDK для Java по инструкции
Подготовка к работе
- Создайте сервисный аккаунт.
- Назначьте роль editor сервисному аккаунту.
- Создайте статический ключ доступа.
Задайте переменные окружения:
export AWS_ACCESS_KEY_ID="<идентификатор_ключа_доступа>"
export AWS_SECRET_ACCESS_KEY="<секретный_ключ>"
Создайте очередь в сервисе Message Queue и подготовьте ее URL.
Пример
Для работы примера необходимо добавить следующие зависимости:
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>amazon-sqs-java-messaging-lib</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sqs</artifactId>
<version>1.11.176</version>
</dependency>
</dependencies>
В этом примере:
- Устанавливается соединение с Message Queue.
- Создается очередь сообщений.
- В очередь передается сообщение с текстом
test message
. - Сообщение считывается из очереди и отображается в терминале.
О возможностях, не продемонстрированных в примере, читайте в документации на сайте AWS SQS Java Messaging Library
package ru.yandex.cloud.message_queue;
import com.amazon.sqs.javamessaging.AmazonSQSMessagingClientWrapper;
import com.amazon.sqs.javamessaging.SQSConnection;
import com.amazon.sqs.javamessaging.SQSConnectionFactory;
import com.amazon.sqs.javamessaging.ProviderConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration;
import javax.jms.*;
public class App
{
private static String queueName = "mq_jms_example";
public static void main( String[] args ) throws JMSException
{
SQSConnectionFactory connectionFactory = new SQSConnectionFactory(
new ProviderConfiguration(),
AmazonSQSClientBuilder.standard()
.withRegion("ru-central1")
.withEndpointConfiguration(new EndpointConfiguration(
"https://message-queue.api.cloud.yandex.net",
"ru-central1"
))
);
SQSConnection connection = connectionFactory.createConnection();
AmazonSQSMessagingClientWrapper client = connection.getWrappedAmazonSQSClient();
if( !client.queueExists(queueName) ) {
client.createQueue( queueName );
}
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue(queueName);
MessageProducer producer = session.createProducer(queue);
Message message = session.createTextMessage("test message");
producer.send(message);
MessageConsumer consumer = session.createConsumer(queue);
connection.start();
message = consumer.receive(1000);
System.out.println(((TextMessage) message).getText());
}
}