RocketMQ生产者和消费者Demo(一)

1,单机模式的配置:进入目录\rocketmq-all-4.7.0-bin-release\conf\2m-noslave,修改broker-a.properties目录如下:

# 集群名称
brokerClusterName=DefaultCluster
# broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
# 0 表示Master,>0 表示Slave
brokerId=0
# nameServer地址,分号分割
namesrvAddr=127.0.0.1:9876
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许Broker 自动创建Topic, 建议线下开启, 线上关闭
autoCreateTopicEnable=true
# 是否允许Broker 自动创建订阅组, 建议线下开启, 线上关闭
autoCreateSubscriptionGroup=true
# Broker 对外服务的监听端口
listenPort=10911
# 删除文件时间点,默认是凌晨4点
deleteWhen=04
# 文件保留时间,默认是48小时
fileReservedTime=48
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# ConsumeQueue每个文件默认存30w条, 根据业务情况调整
mapedFileSizeConsumeQueue=30000
# destroyMapedFileIntervalForcibly=12000
# redeleteHangedFileInterval=12000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=C:/Intel/rocketmq-all-4.7.0-bin-release/store
# commitLog存储路径
storePathCommitLog=C:/Intel/rocketmq-all-4.7.0-bin-release/store/commitlog
# 消息队列储存路径
storePathConsumeQueue=C:/Intel/rocketmq-all-4.7.0-bin-release/store/consumequeue
# 消息索引粗存路径
storePathIndex=C:/Intel/rocketmq-all-4.7.0-bin-release/store/index
# checkpoint 文件储存路径
storeCheckpoint=C:/Intel/rocketmq-all-4.7.0-bin-release/store/checkpoint
# abort 文件存储路径
abortFile=C:/Intel/rocketmq-all-4.7.0-bin-release/store/abort
# 限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker的角色
# -ASYNC_MASTER 异步复制Master
# -SYNC_MASTER 同步双写Master
# -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# checkTransactionMessageEnable=false
# 发消息线程池数量
# sendMessageTreadPoolNums=128
# 拉消息线程池数量
# pullMessageTreadPoolNums=128lushDiskType=ASYNC_FLUSHH

然后按照Windows环境Rocketmq 服务及控制台搭建启动NameServer和Broker。

2,引入依赖

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.6.0</version>
        </dependency>

3,生产者示例

    public class Producer {

    public static void main(String[] args)  {
        try {
            // 1.新建DefaultMQProducer,设置生产者组名称
            DefaultMQProducer producer  = new DefaultMQProducer("demo_group");
            // 2.设置nameServer地址
            producer.setNamesrvAddr("127.0.0.1:9876");
            // 3,启动DefaultMQProducer
            producer.start();
            // 4,构建消息.同一个topic下不同的tag,发送内容不一样
            for (int i = 0; i <5 ; i++) {
                Map map = new HashMap<>();
                map.put("name","xxxx");
                map.put("age",12);
                String mapStr = JSON.toJSONString(map);
                Message message = new Message("top_1","tag_1","key_1",mapStr.getBytes(RemotingHelper.DEFAULT_CHARSET));
                // 发送消息
                SendResult sendResult = producer.send(message);
                System.out.println(sendResult);
            }
            for (int i = 0; i <5 ; i++) {
                String mes = "hello world";
                Message message = new Message("top_1","tag_2","key_1",mes.getBytes(RemotingHelper.DEFAULT_CHARSET));
                SendResult sendResult = producer.send(message);
                System.out.println(sendResult);
            }
            // 5,关闭DefaultMQProducer
            producer.shutdown();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

运行结果如下:

SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71720000, offsetMsgId=0AB8989E00002A9F0000000000001A4C, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=3], queueOffset=10]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71910001, offsetMsgId=0AB8989E00002A9F0000000000001B0E, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=0], queueOffset=6]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71960002, offsetMsgId=0AB8989E00002A9F0000000000001BD0, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=1], queueOffset=8]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE719F0003, offsetMsgId=0AB8989E00002A9F0000000000001C92, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=2], queueOffset=12]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71A30004, offsetMsgId=0AB8989E00002A9F0000000000001D54, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=3], queueOffset=11]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71A60005, offsetMsgId=0AB8989E00002A9F0000000000001E16, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=0], queueOffset=7]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71AA0006, offsetMsgId=0AB8989E00002A9F0000000000001ECB, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=1], queueOffset=9]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71AF0007, offsetMsgId=0AB8989E00002A9F0000000000001F80, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=2], queueOffset=13]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71B30008, offsetMsgId=0AB8989E00002A9F0000000000002035, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=3], queueOffset=12]
SendResult [sendStatus=SEND_OK, msgId=0AB8989E74D814DAD5DC45DE71B60009, offsetMsgId=0AB8989E00002A9F00000000000020EA, messageQueue=MessageQueue [topic=top_1, brokerName=SZ-A1213, queueId=0], queueOffset=8]
2020-05-14 13:36:46 INFO  RocketmqRemoting:95 - closeChannel: close the connection to remote address[10.184.152.158:10911] result: true
2020-05-14 13:36:46 INFO  RocketmqRemoting:95 - closeChannel: close the connection to remote address[127.0.0.1:9876] result: true

4,消费者示例

    public class PushConsumer {

    public static void main(String[] args) {

        // 消息push模式
        DefaultMQPushConsumer consumer = null;
        try {
            // 新建DefaultMQPushConsumer
            consumer = new DefaultMQPushConsumer("demo_consumer_group");
            // 设置nameServer地址
            consumer.setNamesrvAddr("127.0.0.1:9876");
            // 设置消费者组名称
            consumer.setConsumerGroup("demo_consumer_group");
            // 设置消费示例名称
            consumer.setInstanceName("consumer_1");
            // 设置消费模式,广播/集群
            consumer.setMessageModel(MessageModel.BROADCASTING);
            // 设置消息从哪里开始消费
            consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
            // 订阅同一个topic下面的不同tag
            consumer.subscribe("top_1", "tag_1||tag_2");
            consumer.registerMessageListener(new MessageListenerConcurrentlyDemo());
            consumer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 消息监听
    static  class MessageListenerConcurrentlyDemo implements MessageListenerConcurrently{
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
            if (list == null || list.size()==0)  return null;
            for (int i = 0; i <list.size() ; i++) {
                MessageExt messageExt = list.get(i);
                try {
                    if ("tag_1".equals( messageExt.getTags())){
                        System.out.println("编号"+i+":messageExt"+messageExt);
                        String mes = new String(messageExt.getBody(), RemotingHelper.DEFAULT_CHARSET);
                        Map map = (Map) JSON.parse(mes);
                        System.out.println(i+"消息内容tag_1:"+ map);
                    }else if("tag_2".equals( messageExt.getTags())){
                        String mes = new String(messageExt.getBody(), RemotingHelper.DEFAULT_CHARSET);
                        System.out.println(i+"需要内容tag_2:"+mes);
                    }
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    // 消息重试
                    return ConsumeConcurrentlyStatus.RECONSUME_LATER;
                }
            }
            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    }

}

运行结果如下:

0需要内容tag_2:hello world
0需要内容tag_2:hello world
0需要内容tag_2:hello world
0需要内容tag_2:hello world
0需要内容tag_2:hello world
0消息内容tag_1:{"name":"xxxx","age":12}
0消息内容tag_1:{"name":"xxxx","age":12}
0消息内容tag_1:{"name":"xxxx","age":12}
0消息内容tag_1:{"name":"xxxx","age":12}
0消息内容tag_1:{"name":"xxxx","age":12}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值