Two functions below are provided in the basic sample:
maven:
<dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.0</version> </dependency>
gradle:
compile 'org.apache.rocketmq:rocketmq-client:4.3.0'
Reliable synchronous transmission is used in extensive scenes, such as important notification messages, SMS notification.
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(); } }
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.
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(); } }
One-way transmission is used for cases requiring moderate reliability, such as log collection.
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(); } }
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<MessageExt> 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"); } }