tencent cloud

Feedback

Use of Java SDK

Last updated: 2024-01-17 16:55:30

    Overview

    This document describes how to use an open-source SDK to send and receive messages with the SDK for Java serving as example, for you to better understand the complete procedure involved in message sending and receiving.
    Note:
    The Java client is used as an example. For clients of other languages, see the SDK Documentation.

    Prerequisites

    You have created and prepared the required resources.

    Directions:

    Step 1: Installing the Java Dependency Library

    Incorporate the relevant dependencies in the Java project. A Maven project is used as an example. Add the following dependencies to pom.xml:
    <dependencies>
    <dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client-java</artifactId>
    <version>5.0.5</version>
    </dependency>
    </dependencies>

    Step 2: Producing Messages

    public class NormalMessageSyncProducer {
    private static final Logger log = LoggerFactory.getLogger(NormalMessageSyncProducer.class);
    
    private NormalMessageSyncProducer() {
    }
    
    public static void main(String[] args) throws ClientException, IOException {
    final ClientServiceProvider provider = ClientServiceProvider.loadService();
    
    //Adding ak and sk in the configuration
    String accessKey = "yourAccessKey"; //ak
    String secretKey = "yourSecretKey"; //sk
    SessionCredentialsProvider sessionCredentialsProvider =
    new StaticSessionCredentialsProvider(accessKey, secretKey);
    
    // Fill in the access location provided by Tencent Cloud
    String endpoints = "rmq-xxx.rocketmq.xxxtencenttdmq.com:8080";
    ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
    .setEndpoints(endpoints)
    .enableSsl(false)
    .setCredentialProvider(sessionCredentialsProvider)
    .build();
    String topic = "yourNormalTopic";
    // In most case, you don't need to create too many producers, singleton pattern is recommended.
    final Producer producer = provider.newProducerBuilder()
    .setClientConfiguration(clientConfiguration)
    // Set the topic name(s), which is optional but recommended. It makes producer could prefetch the topic
    // route before message publishing.
    .setTopics(topic)
    // May throw {@link ClientException} if the producer is not initialized.
    .build();
    // Define your message body.
    byte[] body = "This is a normal message for Apache RocketMQ".getBytes(StandardCharsets.UTF_8);
    String tag = "yourMessageTagA";
    final Message message = provider.newMessageBuilder()
    // Set topic for the current message.
    .setTopic(topic)
    // Message secondary classifier of message besides topic.
    .setTag(tag)
    // Key(s) of the message, another way to mark message besides message id.
    .setKeys("yourMessageKey-1c151062f96e")
    .setBody(body)
    .build();
    try {
    final SendReceipt sendReceipt = producer.send(message);
    log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
    } catch (Throwable t) {
    log.error("Failed to send message", t);
    }
    // Close the producer when you don't need it anymore.
    producer.close();
    }
    }

    Step 3: Consuming Messages

    TDMQ for RocketMQ 5.x series by Tencent Cloud supports two types of clients: Push Consumer and Simple Consumer.
    The following code is an example based on Push Consumer:
    public class NormalPushConsumer {
    private static final Logger log = LoggerFactory.getLogger(NormalPushConsumer.class);
    
    private NormalPushConsumer() {
    }
    
    public static void main(String[] args) throws ClientException, IOException, InterruptedException {
    final ClientServiceProvider provider = ClientServiceProvider.loadService();
    
    //Adding ak and sk in the configuration
    String accessKey = "yourAccessKey"; //ak
    String secretKey = "yourSecretKey"; //sk
    SessionCredentialsProvider sessionCredentialsProvider =
    new StaticSessionCredentialsProvider(accessKey, secretKey);
    
    // Fill in the access location provided by Tencent Cloud
    String endpoints = "rmq-xxx.rocketmq.xxxtencenttdmq.com:8080";
    ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
    .setEndpoints(endpoints)
    .enableSsl(false)
    .setCredentialProvider(sessionCredentialsProvider)
    .build();
    String tag = "*";
    FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
    String consumerGroup = "yourConsumerGroup";
    String topic = "yourTopic";
    // In most case, you don't need to create too many consumers, singleton pattern is recommended.
    PushConsumer pushConsumer = provider.newPushConsumerBuilder()
    .setClientConfiguration(clientConfiguration)
    // Set the consumer group name.
    .setConsumerGroup(consumerGroup)
    // Set the subscription for the consumer.
    .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
    .setMessageListener(messageView -> {
    // Handle the received message and return consume result.
    log.info("Consume message={}", messageView);
    return ConsumeResult.SUCCESS;
    })
    .build();
    // Block the main thread, no need for production environment.
    Thread.sleep(Long.MAX_VALUE);
    // Close the push consumer when you don't need it anymore.
    pushConsumer.close();
    }
    }

    Step 4: Viewing Message Details

    After the message is sent, you will receive a message ID (messageID). Developers can query the recently sent messages on the Message Query page, as shown in the following figure. Information such as details and traces for specific messages is also available. For details, see Message Query.
    
    
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support