zoukankan      html  css  js  c++  java
  • Docker 安装 RocketMq

    docker安装rocketmq

    前提

    • 电脑安装有docker
    • 会基本的docker指令

    本地docker是安装在虚拟机中192.168.37.147中

    步骤

    docker pull foxiswho/rocketmq:server
    # rocketmq由server + broker组成,因此下载两个镜像
    # 下载docker镜像,官方文档 https://github.com/foxiswho/docker-rocketmq
    #
    pull 拉取镜像
    docker pull foxiswho/rocketmq:broker
    docker pull styletang/rocketmq-console-ng
    # 安装过后需要下载客户端,检测mq的数据
    # 启动rmqserver
    docker run -d -p 9876:9876 --name rmqserver --restart=always foxiswho/rocketmq:server
    # 启动broker
    docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --restart=always --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" -v /root/rocketmq/broker.conf:/etc/rocketmq/broker.conf foxiswho/rocketmq:broker
    --link docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
    -e 设置环境变量 -e username="ritchie": 设置环境变量;
    --restart=always 跟随docker一起启动
    --volume , -v: 绑定一个卷
    # 启动 rocketmq-console-ng
    docker run -d --name rmqconsole -p 8180:8080 --restart=always --link rmqserver:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng

    跟随docker自动启动
    docker update --restart=always xx

    启动后可以再windows电脑中访问

    http://192.168.37.147:8180/#/

    遇到的问题

    Java代码无法访问docker

            DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
    
            producer.setNamesrvAddr("192.168.37.147:9876");
    
            producer.start();
    
            for (int i = 0; i < 10; i++) {
                //消息子类型用tags来标识
                Message msg = new Message("TopicTest", "", ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
                //每个消息在业务局面的唯一标识码,要设置到keys字段,方便将来定位消息丢失问题。服务器会为每个消息创建索引(哈希索引),应用可以通过topic,key来查询这条消息内 容,以及消息被谁消费。由于是哈希索引,请务必保证key尽可能唯一,这样可以避免潜在的哈希冲突。 
//订单Id
String orderId = "20034568923546"; 
message.setKeys(orderId); 

                msg.setKeys("key-" + i);
                SendResult sendResult = producer.send(msg);
    //            SEND_OK 消息发送成功
    //
    //            FLUSH_DISK_TIMEOUT 消息发送成功,但是服务器刷盘超时,消息已经迕入服务器队列,只有此时服务器宕机,消息才会丢失
    //
    //            FLUSH_SLAVE_TIMEOUT 消息发送成功,但是服务器同步到 Slave时超时,消息已经迕入服务器队列,只有此时服务器宕机,消息才会丢失
    //
    //            SLAVE_NOT_AVAILABLE 消息发送成功,但是此时 slave 不可用,消息已经迕入服务器队列,只有此时服务器宕机,消息才会丢失
    
                //对于消息不可丢失应用,务必要有消息重发机制,例如如果消息发送失败,存储到数据库,能有定时程序尝试重发,或者人工触发重发。
    
                System.out.printf("%s%n", sendResult);
            }
    
            producer.shutdown();

    需要在宿主机中修改broker.conf,地址在/root/rocketmq/broker.conf,就是-v 挂载的文件

     

  • 相关阅读:
    JavaScript原生对象属性和方法详解——Array对象[转]
    SVN的trunk branch tag (二)
    git入门使用摘录
    文字画工具推荐
    mysql 基础操作
    mobile 测试入门思维导图
    淘宝性能测试线下测试与线上跟踪体系
    github使用入门 之GIT GUI Windows版
    C++ 单向链表反转
    shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹
  • 原文地址:https://www.cnblogs.com/herenwei-wayne/p/14768193.html
Copyright © 2011-2022 走看看