Apache RocketMQ官方文档中文精简版-简单消息示例

示例内容

本示例使用RocketMQ 以三种方式发送消息:可靠的同步方式、可靠的异步方式和单向传输。

本示例演示使用RocketMQ来消费消息。

1. 添加依赖

mave

 <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'

2. 发送消息

2.1 同步地发送消息

可靠的同步传输被广泛地应用多种场景,例如重要的通知消息、短信通知、短信营销系统等。

public class SyncProducer {
    public static void main(String[] args) throws Exception {
        //创建生产者实例,指定生成者组名
        DefaultMQProducer producer = new
            DefaultMQProducer("please_rename_unique_group_name");
        // 给生产者指定name server的地址
        producer.setNamesrvAddr("localhost:9876");
        // 启动生成者实例
        producer.start();
        for (int i = 0; i < 100; i++) {
            //创建一个消息实例, 指定主题,标签,和消息主体内容.
            Message msg = new Message("TopicTest" /* 主题 */,
                "TagA" /* 标签 */,
                ("Hello RocketMQ " +
                    i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* 消息主题内容 */
            );
            //调用生产者的send方法,发布消息到某个broker服务器上,返回SendResult。
            SendResult sendResult = producer.send(msg);
            System.out.printf("%s%n", sendResult);
        }
        //一旦生产者实例不再使用,则关闭生产者。
        producer.shutdown();
    }
}

 

2.2 异步地发送消息

异步传输通常用于响应时间敏感的业务场景。

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();
        //设置当异步发送失败时,重试次数为0,可视情况调整
        producer.setRetryTimesWhenSendAsyncFailed(0);
        for (int i = 0; i < 100; i++) {
                final int index = i;
                //Create a message instance, specifying topic, tag and message body.
                Message msg = new Message("TopicTest",
                    "TagA",
                    "OrderID188",
                    "Hello world".getBytes(RemotingHelper.DEFAULT_CHARSET));
                //发送消息时,可定义回调函数,可编写发送成功或异常时的执行程序
                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 以单向模式发送消息

单向传输用于需要中等可靠性的情况,如日志收集。单向意味着没有context上下文去获取结果.

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 */
            );
            //调用生成者的sendOneWay方法,来发送消息到某个broker服务器上。
            producer.sendOneway(msg);

        }
        //Shut down once the producer instance is not longer in use.
        producer.shutdown();
    }
}

 3. 消费消息

public class Consumer {

    public static void main(String[] args) throws InterruptedException, MQClientException {

        // 初始化消息消费者实例,指定消费者组名
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
         
        // 制定name server的地址
        consumer.setNamesrvAddr("localhost:9876");
        
        // 调用消费者实例的subscribe方法,订阅一个以上的主题来消费
        consumer.subscribe("TopicTest", "*");
        // 调用registerMessageListener方法来注册回调函数,在从broker获取到消息之后执行
        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;
            }
        });

        //启动消费者实例
        consumer.start();

        System.out.printf("Consumer Started.%n");
    }
}

4. 更多

或者,您可以从以下网站获得更多示例:

https://github.com/apache/rocketmq/tree/master/example

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值