RocketMQ入门

RocketMq入门

1.rocketmq概念模型

1.简易模型

RocketMQ入门_第1张图片
这三者是RocketMq中最最基本的概念。Producer是消息的生产者。Consumer是消息的消费者。消息通过Topic进行传递。Topic存放的是消息的逻辑地址。具体来说是Producer将消息发往具体的Topic。Consumer订阅Topic,主动拉取或被动接受消息。

2.细化模型

RocketMQ入门_第2张图片
这便是rocketmq的整体架构、它由nameserve、broker、producer、consumer四个部分组成
这里需要搭建rocketmq服务器也就是nameserve和broker,为了方便这里使用window版
下载地址:https://pan.baidu.com/s/16tjcSNEyK9xK_Z6DITci0A 提取码b20s
这里使用4.2版本(注意maven依赖也使用4.2否则会报错)

2.简单功能实现

RocketMQ有两种消费模式:BROADCASTING广播模式,CLUSTERING集群模式,默认的是 集群消费模式。
广播模式:生产者生产10条消息,消费者A,B都可以获取到这10条消息。
集群模式:消费者生产10条消息,消费者A、B均消费其中的几条,但被A消费的不能再被B消费

废话不多说,上代码:
1.首先引入依赖


        
            org.springframework.boot
            spring-boot-starter
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.apache.rocketmq
            rocketmq-client
            4.2.0
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

2.编写生产者代码

public class Producer {
    public static void main(String[] args) throws Exception{
            DefaultMQProducer producer = new DefaultMQProducer("order_Producer");
            producer.setNamesrvAddr("127.0.0.1:9876");

            producer.start();

            //发送10条消息到Topic为TopicTest,tag为TagA,消息内容为“Hello RocketMQ”拼接上i的值
            for (int i = 0; i < 5; i++) {
                try {
                    Message msg = new Message("TopicOrderTest",// topic
                            "TagA",// tag
                            ("Hello RocketMQ " + i).getBytes("utf-8")// body
                    );
                    
					//msg.setDelayTimeLevel(1);设置消息延时发送
					//messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
					
                    //调用producer的send()方法发送消息
                    //这里调用的是同步的方式,所以会有返回结果
                    SendResult sendResult = producer.send(msg);
                    System.out.println(sendResult.getSendStatus()); //发送结果状态
                    //打印返回结果,可以看到消息发送的状态以及一些相关信息
                    System.out.println(sendResult);
                } catch (Exception e) {
                    e.printStackTrace();
                    Thread.sleep(1000);
                }
            }
            //发送完消息之后,调用shutdown()方法关闭producer
            producer.shutdown();
        }
}

3.编写消费者1、2代码相同不重复贴出

public class Consumer1 {
    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("order_Consumer");
        consumer.setNamesrvAddr("127.0.0.1:9876");

        /**
         * 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费
* 如果非第一次启动,那么按照上次消费的位置继续消费 */ consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.setMessageModel(MessageModel.BROADCASTING);//这里为设置广播模式 consumer.subscribe("TopicOrderTest", "*"); consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List list, ConsumeConcurrentlyContext context) { try { MessageExt msg = list.get(0); String msgBody = new String(msg.getBody(), "utf-8"); System.out.println("msgBody:" + msgBody); } catch(Exception e) { e.printStackTrace(); return ConsumeConcurrentlyStatus.RECONSUME_LATER; } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); System.out.println("Consumer1 Started."); } }

4.启动rocketmq服务器
找到下载解压后的目录如:G:\develop\rocketmq\bin
修改runserver.cmd,runbroker.cmd两个文件的启动内存,改小就行
在这里插入图片描述
在这里插入图片描述
在这个目录cmd,按顺序启动mqnamesrv.cmd和mqbroker.cmd
RocketMQ入门_第3张图片
这就说明mqnamesrv运行成功了
RocketMQ入门_第4张图片
这就说明mqbroker运行成功了这样就rocketmq就部署好了,当然内存充足还可以在弄个控制台(这里就不弄了)

部署完成后,首先将消费者1,2运行起来,再运行消费者,运行结果如下:
RocketMQ入门_第5张图片
这是消费者发送5条消息
RocketMQ入门_第6张图片
RocketMQ入门_第7张图片
这是消费者1,2信息消费情况
想要切换集群消费只需要注释consumer.setMessageModel(MessageModel.BROADCASTING);//这里为设置广播模式
这段代码就ok了

你可能感兴趣的:(Rocketmq,JAVA,RocketMq)