最完整的RocketMq部署程序,包括rocketmq-console部署和测试程序的介绍

文章目录

  • 1.RocketMq部署
    • 准备工作
    • RocketMq程序的获取
    • 启动NameServer
    • 启动Broker
    • 查看log日志
  • 2.运维工具部署
    • 获取程序
    • 参数配置
    • 运行程序
  • 3.实际测试
    • 代码获取
    • 运行
  • 4.开始学习~

1.RocketMq部署

本文详细介绍了安装rocketMq 前后的方法和一些注意事项 ,设备为centos7,话不多说,begin。

准备工作

建议把jdk,maven,git先都装上。

RocketMq程序的获取

首先需要获取rocketMq的程序,源程序或可执行包都可以,这边直接获取可执行程序。

wget http://www-us.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
//如果已经有可以解压zip的程序,可省去这一步
yum install zip unzip
//这边可以使用-d指定解压缩的位置
unzip rocketmq-all-4.2.0-bin-release.zip

这样操作的话会在当前目录下生成一个rocketmq的文件夹,进入该文件夹

cd rocketmq

编辑bin目录下的 runserver.sh,runbroker.sh,tools.sh 这三个文件,修改位置分别为

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m -XX:MetaspaceSize=12m -XX:MaxMetaspaceSize=32m"

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m"

JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn25m -XX:PermSize=12m -XX:MaxPermSize=12m"

根据自己的配置酌情设置就行了。
接着开放一下端口,这个是iptables的策略,包括

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9876 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10911 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10909 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT

然后重启

service iptables restart 

建议把 10910加上,避免不必要的麻烦。一般云主机在控制台都可以直接编辑,如果没有iptables,firewall就自己看着办吧。

启动NameServer

nohup sh bin/mqnamesrv &
//之后回车就行了,可以根据提示查看一下nohup.out的输出内容,是否出现成功字样

启动Broker

先配置一下ip,目的是为了可以使用公网ip可以访问到broker。

vim conf/broker.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=xxxx:9876
brokerIP1=xxxx

启动

//这边的ip可以是localhost,指定本机ip应该也可以
nohup sh bin/mqbroker -n xxxx:9876 autoCreateTopicEnable=true -c conf/broker.conf & 

查看log日志

log日志位于~/logs/rocketmqlogs/ 路径下,包括但不限于namesrv.log和broker.log。注意broker日志内容的broker的ip得是公网ip,外部机器才可以访问到。

2.运维工具部署

获取程序

git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console/

参数配置

vi src/main/resources/application.properties

照着这个改就行了。

#管理后台访问上下文路径,默认为空,如果填写,一定要前面加“/”,后面不要加,否则启动报错
server.contextPath=/rocketmq
#访问端口
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#logback配置文件路径
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
#Name Server地址,修改成你自己的服务地址
rocketmq.config.namesrvAddr=xxxx:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console’s data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don’t want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true

运行程序

没有mvn,自行安装。https://www.cnblogs.com/clicli/p/5866390.html

mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar

启动成功后访问http://localhost:8080/rocketmq就可以了,当然是服务器的ip地址了。

3.实际测试

代码获取

代码我偷的,不会用,主要是拿来先测一下。

//依赖

      org.apache.rocketmq
      rocketmq-client
      4.2.0


      com.alibaba.rocketmq
      rocketmq-all
      3.6.2.Final
      pom


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

        // 声明并初始化一个producer
        // 需要一个producer group名字作为构造方法的参数,这里为producer1
        DefaultMQProducer producer = new DefaultMQProducer("producer1");
        producer.setVipChannelEnabled(false);
        // 设置NameServer地址,此处应改为实际NameServer地址,多个地址之间用;分隔
        // NameServer的地址必须有
        // producer.setClientIP("xxxx");
        // producer.setInstanceName("Producer");
        producer.setNamesrvAddr("xxxx:9876");

        // 调用start()方法启动一个producer实例
        producer.start();

        // 发送1条消息到Topic为TopicTest,tag为TagA,消息内容为“Hello RocketMQ”拼接上i的值
        try {
            // 封装消息
            Message msg = new Message("TopicTest",// topic
                    "TagA",// tag
                    ("Hello RocketMQ").getBytes(RemotingHelper.DEFAULT_CHARSET)// body
            );
            // 调用producer的send()方法发送消息
            // 这里调用的是同步的方式,所以会有返回结果
            SendResult sendResult = producer.send(msg);
            // 打印返回结果
            System.out.println(sendResult);
        } catch (RemotingException e) {
            e.printStackTrace();
        } catch (MQBrokerException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        //发送完消息之后,调用shutdown()方法关闭producer
        System.out.println("send success");
        producer.shutdown();
    }
}

//Consumer 
public class Consumer {

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

        //声明并初始化一个consumer
        //需要一个consumer group名字作为构造方法的参数,这里为consumer1
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
        //consumer.setVipChannelEnabled(false);
        //同样也要设置NameServer地址
        consumer.setNamesrvAddr("xxxx:9876");

        //这里设置的是一个consumer的消费策略
        //CONSUME_FROM_LAST_OFFSET 默认策略,从该队列最尾开始消费,即跳过历史消息
        //CONSUME_FROM_FIRST_OFFSET 从队列最开始开始消费,即历史消息(还储存在broker的)全部消费一遍
        //CONSUME_FROM_TIMESTAMP 从某个时间点开始消费,和setConsumeTimestamp()配合使用,默认是半个小时以前
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);

        //设置consumer所订阅的Topic和Tag,*代表全部的Tag
        consumer.subscribe("TopicTest", "*");

        //设置一个Listener,主要进行消息的逻辑处理
        consumer.registerMessageListener(new MessageListenerConcurrently() {

            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List msgs,
                                                            ConsumeConcurrentlyContext context) {

                System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
                System.out.println("----------------------------------------------------------------------------------");
                //返回消费状态
                //CONSUME_SUCCESS 消费成功
                //RECONSUME_LATER 消费失败,需要稍后重新消费
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });
        //调用start()方法启动consumer
        consumer.start();
        System.out.println("Consumer Started.");
    }
}
--------------------- 
作者:innerpeacez 
来源:CSDN 
原文:https://blog.csdn.net/zhwyj1019/article/details/80264698 
版权声明:本文为博主原创文章,转载请附上博文链接!

运行

先启动哪个程序不用我多说了8。

4.开始学习~

主要还欠缺控制台的权限验证和绑定消费者时的权限验证。之后可以扩展多个nameserver保证可用性,扩展broker尝试负载均衡。

你可能感兴趣的:(RocketMq)