RocketMQ学习之一---阿里云部署及如何进行程序调用

提示:这篇文章可以看看RocketMQ - 阿里云部署、及外网访问的那些个问题
但是我在部署的时候还是遇到些问题,完善一下


一、下载RocketMQ 4.7.1版本

​ RocketMQ运行版本下载地址: https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip

二、快速安装

没有云服务器的,自己可以进行虚拟机的Linux系统的安装,都一样,本篇不采用docker的方式进行安装,初学还是要采用基本的方式,更能加深对齐理解。

 运行RocketMQ需要先安装JDK。我们采用目前最稳定的JDK1.8版本
tar -zxvf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171/ /app/jdk1.8

​ 配置环境变量

export JAVA_HOME=/app/jdk1.8/
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH

执行 source ~/.bash_profile让环境变量生效。输入java -version能查看到以下内容表明JDK安装成功

把下载的rocketmq-all-4.7.1-bin-release.zip在本地完成解压,并上传到/app/rocketmq目录。完成后,把rocketmq的bin目录也配置到环境变量当中。 vi ~/.bash_profile,加入以下内容,并执行source ~/.bash_profile让环境变量生效:

export JAVA_HOME=/app/jdk1.8/
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release
PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH

三、运行

![在这里插入图片描述](https://img-blog.csdnimg.cn/20201208114611572.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIyMTMwMjA5,size_16,color_FFFFFF,t_70) ## 1 启动NameServer 直接修改runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=300m"

启动NameServer服务:

nohup bin/mqnamesrv & 

NameServer就是broker的管理者,可以理解为和zookeeper差不多

启动完成后,在nohup.out里看到这一条关键日志就是启动成功了
在这里插入图片描述

启动Broker

启动Broker的脚本是runbroker.sh。修改默认配置runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

去conf/broker.conf文件进行添加,代表没有主题自动进行创建

autoCreateTopicEnable=true

然后启动broker

nohup bin/mqbroker &

阿里云服务器的注意:
阿里云服务器以配置文件外网ip启动,避免程序报错
nohup sh bin/mqbroker -n 外网ip:9876 -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/broker.conf &

关于RocketMQ消息集群的搭建,如下

nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-a.properties &
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-b-s.properties &

nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-b.properties &
nohup sh bin/mqbroker -c /app/rocketmq/rocketmq-all-4.7.1-bin-release/conf/2m-2s-async/broker-a-s.properties &

启动成功:

The broker[iz2ze30i9sf80zvge6srekz, 172.17.36.222:10911] boot success. serializeType=JSON

开关rocketMQ服务

# 1.关闭NameServer
sh bin/mqshutdown namesrv
# 2.关闭Broker
sh bin/mqshutdown broker
# 3 查看进程
ps aux|grep java|grep mq

四、程序简单运行

生产者:

public class Producer {
    public static void main(String[] args) throws MQClientException, InterruptedException {

       
        DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");

        producer.setNamesrvAddr("云服务器外网ip:9876");
       
        producer.start();

        for (int i = 0; i < 2; i++) {
            try {

                Message msg = new Message("TopicTest" /* Topic */,
                    "TagA" /* Tag */,
                    ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
                );
                //messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
                msg.setDelayTimeLevel(3);
                /*
                 * Call send message to deliver message to one of brokers.
                 */
                SendResult sendResult = producer.send(msg);

                System.out.printf("%s%n", sendResult);
            } catch (Exception e) {
                e.printStackTrace();
                Thread.sleep(1000);
            }
        }

        producer.shutdown();
    }
}

在这里插入图片描述

消费者:

public class Consumer {

    public static void main(String[] args) throws InterruptedException, MQClientException {

        /*
         * Instantiate with specified consumer group name.
         */
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");

        consumer.setNamesrvAddr("云服务器外网ip:9876");
        /*
         * Specify where to start in case the specified consumer group is a brand new one.
         */
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);

        /*
         * Subscribe one more more topics to consume.
         */
        consumer.subscribe("TopicTest", "*");

        /*
         *  Register callback to execute on arrival of messages fetched from brokers.
         */
        consumer.registerMessageListener(new MessageListenerConcurrently() {

            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
                ConsumeConcurrentlyContext context) {
                System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        /*
         *  Launch the consumer instance.
         */
        consumer.start();

        System.out.printf("Consumer Started.%n");
    }
}

在这里插入图片描述
在这里插入图片描述
可以看到生产者发送了消息,消费者也接收到了消息,我们的单机rocketMQ就搭建成功了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值