| --- |
| title: "Simple Message Example" |
| permalink: /docs/simple-example/ |
| excerpt: "How to send simple message to reduce pull in RocketMQ." |
| modified: 2017-04-24T15:01:43-04:00 |
| --- |
| |
| |
| |
| {% include toc %} |
| |
| * Use RocketMQ to send messages in three ways: reliable synchronous, reliable |
| asynchronous, and one-way transmission. |
| * Use RocketMQ to consume messages |
| |
| #### 1. Add Dependency |
| maven: |
| |
| ```java |
| <dependency> |
| <groupId>org.apache.rocketmq</groupId> |
| <artifactId>rocketmq-client</artifactId> |
| <version>4.9.4</version> |
| </dependency> |
| ``` |
| |
| gradle: |
| |
| ```java |
| compile 'org.apache.rocketmq:rocketmq-client:4.9.4' |
| ``` |
| |
| #### 2.1 Send Messages Synchronously |
| |
| Reliable synchronous transmission is used in extensive scenes, such as |
| important notification messages, SMS notification, SMS marketing system, etc.. |
| |
| ```java |
| public class SyncProducer { |
| public static void main(String[] args) throws Exception { |
| //Instantiate with a producer group name. |
| DefaultMQProducer producer = new |
| DefaultMQProducer("please_rename_unique_group_name"); |
| // Specify name server addresses. |
| producer.setNamesrvAddr("localhost:9876"); |
| //Launch the instance. |
| producer.start(); |
| for (int i = 0; i < 100; i++) { |
| //Create a message instance, specifying topic, tag and message body. |
| Message msg = new Message("TopicTest" /* Topic */, |
| "TagA" /* Tag */, |
| ("Hello RocketMQ " + |
| i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */ |
| ); |
| //Call send message to deliver message to one of brokers. |
| SendResult sendResult = producer.send(msg); |
| System.out.printf("%s%n", sendResult); |
| } |
| //Shut down once the producer instance is not longer in use. |
| producer.shutdown(); |
| } |
| } |
| |
| ``` |
| #### 2.2 Send Messages Asynchronously |
| |
| Asynchronous transmission is generally used in response time sensitive business scenarios. |
| |
| ```java |
| public class AsyncProducer { |
| public static void main(String[] args) throws Exception { |
| //Instantiate with a producer group name. |
| DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); |
| // Specify name server addresses. |
| producer.setNamesrvAddr("localhost:9876"); |
| //Launch the instance. |
| producer.start(); |
| producer.setRetryTimesWhenSendAsyncFailed(0); |
| |
| int messageCount = 100; |
| final CountDownLatch countDownLatch = new CountDownLatch(messageCount); |
| for (int i = 0; i < messageCount; i++) { |
| try { |
| final int index = i; |
| Message msg = new Message("Jodie_topic_1023", |
| "TagA", |
| "OrderID188", |
| "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET)); |
| producer.send(msg, new SendCallback() { |
| @Override |
| public void onSuccess(SendResult sendResult) { |
| countDownLatch.countDown(); |
| System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId()); |
| } |
| |
| @Override |
| public void onException(Throwable e) { |
| countDownLatch.countDown(); |
| System.out.printf("%-10d Exception %s %n", index, e); |
| e.printStackTrace(); |
| } |
| }); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| countDownLatch.await(5, TimeUnit.SECONDS); |
| producer.shutdown(); |
| } |
| } |
| ``` |
| |
| #### 2.3 Send Messages in One-way Mode |
| |
| One-way transmission is used for cases requiring moderate reliability, |
| such as log collection. |
| |
| ```java |
| public class OnewayProducer { |
| public static void main(String[] args) throws Exception{ |
| //Instantiate with a producer group name. |
| DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); |
| // Specify name server addresses. |
| producer.setNamesrvAddr("localhost:9876"); |
| //Launch the instance. |
| producer.start(); |
| for (int i = 0; i < 100; i++) { |
| //Create a message instance, specifying topic, tag and message body. |
| Message msg = new Message("TopicTest" /* Topic */, |
| "TagA" /* Tag */, |
| ("Hello RocketMQ " + |
| i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */ |
| ); |
| //Call send message to deliver message to one of brokers. |
| producer.sendOneway(msg); |
| } |
| //Wait for sending to complete |
| Thread.sleep(5000); |
| producer.shutdown(); |
| } |
| } |
| |
| ``` |
| |
| #### 3. Consume Messages |
| |
| ```java |
| public class Consumer { |
| |
| public static void main(String[] args) throws InterruptedException, MQClientException { |
| |
| // Instantiate with specified consumer group name. |
| DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name"); |
| |
| // Specify name server addresses. |
| consumer.setNamesrvAddr("localhost:9876"); |
| |
| // Subscribe one more more topics to consume. |
| consumer.subscribe("TopicTest", "*"); |
| // Register callback to execute on arrival of messages fetched from brokers. |
| consumer.registerMessageListener(new MessageListenerConcurrently() { |
| |
| @Override |
| public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, |
| ConsumeConcurrentlyContext context) { |
| System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs); |
| return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; |
| } |
| }); |
| |
| //Launch the consumer instance. |
| consumer.start(); |
| |
| System.out.printf("Consumer Started.%n"); |
| } |
| } |
| ``` |
| |
| #### 4. Find More |
| Alternatively, you could get more examples from: |
| https://github.com/apache/rocketmq/tree/master/example |
| |
| |