• 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"

    三、启动 NameServer

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

    start mqnamesrv.cmd
    mqnamesrv.cmd -n localhost:9876

    出现The Name Server boot success.字样表示成功

    四、启动 Broker

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

    start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
    mqbroker.cmd -n localhost:9876

    五、java示例代码
    添加maven依赖
     
    <dependency>
        <groupId>org.apache.rocketmq</groupId>
        <artifactId>rocketmq-client</artifactId>
        <version>4.2.0</version>
    </dependency>
    ---------------------
    消费者
    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.");
        }
    }
    --------------------- 

    生产者

    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 ocketmq-consolesrcmain esources 目录下,编辑 application.properties 文件, 修改mq的连接地址信息:
     

    rocketmq.config.namesrvAddr=localhost:98761

    3、启动项目

    在rocketmq-externals ocketmq-console目录下,执行:
    nohup java -jar shareniu.jar >/dev/null  &  
     
    mvn spring-boot:run
    等待启动成功。
     
    [2018-03-05 10:54:19.823]  INFO Initializing ProtocolHandler ["http-nio-8080"]
    [2018-03-05 10:54:19.853]  INFO Starting ProtocolHandler [http-nio-8080]
    [2018-03-05 10:54:19.893]  INFO Using a shared selector for servlet write/read
    [2018-03-05 10:54:19.929]  INFO Tomcat started on port(s): 8080 (http)
    [2018-03-05 10:54:19.940]  INFO Started App in 9.61 seconds (JVM running for 18.979)12345

    4、浏览器访问:http://localhost:8080
    ---------------------
  • 相关阅读:
    读取.properties配置文件并保存到另一个.properties文件内
    kafka启动报错:另一个程序正在使用此文件,进程无法访问。
    使用Spring boot 嵌入的tomcat不能启动: Unregistering JMX-exposed beans on shutdown
    java把map转json
    java代码生成xml 报错:HIERARCHY_REQUEST_ERR: 尝试在不允许的位置插入节点。
    查询数据库时mapper报错:It's likely that neither a Result Type nor a Result Map was specified.
    获取session
    Apache服务器运维笔记(2)----使用apxs来进行编译安装 mod_txt 模块
    Apache服务器运维笔记(2)----使用<IfDefine>容器实现不同的配置
    Apache服务器运维笔记(1)----运行多个Apache服务器
  • 原文地址:https://www.cnblogs.com/dand/p/10183474.html
Copyright © 2020-2023  润新知