# Basic Sample ------ Two functions below are provided in the basic sample: * The RocketMQ can be utilized to send messages in three ways: reliable synchronous, reliable asynchronous, and one-way transmission. The first two message types are reliable because there is a response whether they were sent successfully. * The RocketMQ can be utilized to consume messages. ### 1 Add Dependency maven: ``` java org.apache.rocketmq rocketmq-client 4.3.0 ``` gradle: ``` java compile 'org.apache.rocketmq:rocketmq-client:4.3.0' ``` ### 2 Send Messages ##### 2.1 Use Producer to Send Synchronous Messages Reliable synchronous transmission is used in extensive scenes, such as important notification messages, SMS notification. ``` 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 producer instance producer.start(); for (int i = 0; i < 100; i++) { // Create a message instance with specifying topic, tag and message body Message msg = new Message("TopicTest" /* Topic */, "TagA" /* Tag */, ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */ ); // Send message to one of brokers SendResult sendResult = producer.send(msg); // Check whether the message has been delivered by the callback of sendResult System.out.printf("%s%n", sendResult); } // Shut down once the producer instance is not longer in use producer.shutdown(); } } ``` ##### 2.2 Send Asynchronous Messages Asynchronous transmission is generally used in response time sensitive business scenarios. It means that it is unable for the sender to wait the response of the Broker too long. ``` 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 producer instance producer.start(); producer.setRetryTimesWhenSendAsyncFailed(0); for (int i = 0; i < 100; i++) { final int index = i; // Create a message instance with specifying topic, tag and message body Message msg = new Message("TopicTest", "TagA", "OrderID188", "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET)); // SendCallback: receive the callback of the asynchronous return result. producer.send(msg, new SendCallback() { @Override public void onSuccess(SendResult sendResult) { System.out.printf("%-10d OK %s %n", index, sendResult.getMsgId()); } @Override public void onException(Throwable e) { System.out.printf("%-10d Exception %s %n", index, e); e.printStackTrace(); } }); } // Shut down once the producer instance is not longer in use 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 producer instance producer.start(); for (int i = 0; i < 100; i++) { // Create a message instance with specifying topic, tag and message body Message msg = new Message("TopicTest" /* Topic */, "TagA" /* Tag */, ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */ ); // Send in one-way mode, no return result producer.sendOneway(msg); } // Shut down once the producer instance is not longer in use 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 or more topics and tags for finding those messages need to be consumed consumer.subscribe("TopicTest", "*"); // Register callback to execute on arrival of messages fetched from brokers consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) { System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs); // Mark the message that have been consumed successfully return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); // Launch the consumer instance consumer.start(); System.out.printf("Consumer Started.%n"); } } ```