windows搭建RocketMQ服务

环境:

1、基于rocketmq 4.2.0版本
2、64位 win10 系统
3、JDK 1.8 (注意,jdk路径一定不要有空格,不然执行相应的cmd命令时会报错)
4、其它需要的软件,maven,git

一、下载二进制程序包

在官网选择编译后的压缩包下载
http://rocketmq.apache.org/release_notes/release-notes-4.2.0/
下图中红框处
在这里插入图片描述

或者去apache存档库中下载
http://archive.apache.org/dist/rocketmq/4.2.0/

下载好的文件: rocketmq-all-4.2.0-bin-release.zip

将下载好的zip包解压,注意路径也不要包含空格。

二、修改rocketmq配置

这一步也可以跳过,但有可能会因为内存设置过大导致一系列的问题

需要执行的命令都在程序目录下的bin文件夹下,主要是mqnamesrv.cmd和mqbroker.cmd这两个命令,但他们又都各自调用了runserver.cmd和runbroker.cmd命令,分别修改这两个文件里的JAVA_OPT设置,如下

set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

将 Xms Xmx 这两个值改小一些,改为1g,如:

set “JAVA_OPT=%JAVA_OPT% -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m”
1

三、启动 NameServer

在rocketmq安装目录下的bin目录下,执行命令:

 mqnamesrv.cmd -n localhost:9876

出现 The Name Server boot success.字样表示成功
在这里插入图片描述

四、启动 Broker

在rocketmq安装目录下的bin目录下,执行命令:

mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true &

注意:这个执行完没有任何提示,只要不报错即表示成功

五、java示例代码

5.1 添加maven依赖

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

5.2 消费者

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class Consumer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("my-group");

        consumer.setNamesrvAddr("localhost:9876");
        consumer.setInstanceName("rmq-instance");
        consumer.subscribe("demo-topic", "demo-tag");

        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(
                    List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        consumer.start();
        System.out.println("Consumer Started.");
    }
}

5.3 生产者

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.util.Scanner;

public class Producer {
    public static void main(String[] args) throws MQClientException {
        DefaultMQProducer producer = new DefaultMQProducer("my-group");
        producer.setNamesrvAddr("localhost:9876");
        producer.setInstanceName("rmq-instance");
        producer.start();
        try {
            Message message = new Message("demo-topic", "demo-tag", "这是一条测试消息".getBytes());
            producer.send(message);

            while (true) {
                String text = new Scanner(System.in).next();
                Message msg = new Message("demo-topic",// topic
                        "demo-tag",// tag
                        text.getBytes() // body
                );
                SendResult sendResult = producer.send(msg);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        producer.shutdown();
    }
}

运行Consumer和Producer,然后在生产者控制台输入文本,在消费者控制台就可以看到消息了。

六、搭建RocketMQ web控制台

1、访问 https://github.com/apache/rocketmq-externals/ , 使用git将代码clone下来

2、 修改项目配置信息
这是一个用springboot编写的工程,进入到 rocketmq-externals\rocketmq-console\src\main\resources 目录下,
编辑 application.properties 文件, 修改mq的连接地址信息:

   rocketmq.config.namesrvAddr=localhost:9876

3、 启动项目
在rocketmq-externals\rocketmq-console目录下,执行:

mvn spring-boot:run

等待启动成功。

4、浏览器访问:http://localhost:8080

七、RocketMQ报错No route info of this topic解决方案

按照官方文档启动broker
↓↓↓↓↓↓这是错误的!!!↓↓↓↓↓↓

nohup sh bin/mqbroker -n localhost:9876 &

↑↑↑↑↑↑这是错误的!!!↑↑↑↑↑↑

测试时会报错:

com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1
See http://docs.aliyun.com/cn#/pub/ons/faq/exceptions&topic_not_exist for further details.
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.sendDefaultImpl(DefaultMQProducerImpl.java:542)
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:1030)
    at com.alibaba.rocketmq.client.impl.producer.DefaultMQProducerImpl.send(DefaultMQProducerImpl.java:989)
    at com.alibaba.rocketmq.client.producer.DefaultMQProducer.send(DefaultMQProducer.java:90)
    at com.yang.rocketmq.Producer.main(Producer.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

将broker启动方式

nohup sh bin/mqbroker -n localhost:9876 &

改为:
↓↓↓↓↓↓这才是正确的!!!↓↓↓↓↓↓

nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &

↑↑↑↑↑↑这才是正确的!!!↑↑↑↑↑↑

OK!

官网说明:
https://rocketmq.apache.org/docs/quick-start/
https://blog.csdn.net/yangding_/article/details/62419383
https://blog.csdn.net/javahighness/article/details/79449054

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值