Mac环境下本地部署RocketMQ及可视化工具

174 阅读1分钟

一、下载RocketMQ

rocketmq.apache.org/zh/download 下载二进制版本并解压

二、启动NameServer

在启动之前,可以修改下启动配置参数

vi bin/runserver.sh

修改jvm参数

-server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=50m

使用一下命令启动

nohup sh bin/mqnamesrv &

三、启动broker

在启动之前同样可以修改启动配置

vi bin/runbroker.sh

修改jvm参数 -server -Xms1g -Xmx1g -Xmn512m

修改conf配置文件

vi conf/broker.conf

在末尾添加nameserver地址

namesrvAddr = localhost:9876

启动命令

nohup sh bin/mqbroker -c conf/broker.conf &

四、搭建可视化工作台

前往官网下载源码

https://rocketmq.apache.org/zh/download

使用maven打包

$ mvn clean package -Dmaven.test.skip=true

启动服务

nohup java -jar -server -Xms256m -Xmx256m -Drocketmq.config.namesrvAddr=127.0.0.1:9876 -Dserver.port=8088 rocketmq-dashboard-2.0.0.jar &

启动成功后输入localhost:8080就可以访问了控制台了

五、代码测试

引入依赖

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>5.1.0</version>
</dependency>

注册生产者

@Configuration
public class DefaultProducerConfig {

    @Resource
    RocketMQProperties rocketMQProperties;

    @Bean
    public DefaultMQProducer mqProducer() throws MQClientException {
        DefaultMQProducer producer = new DefaultMQProducer("default_producer_group");
        producer.setNamesrvAddr(rocketMQProperties.getNameServer());
        producer.start();
        return producer;
    }
}

注册消费者

@Component
public class MqManualRegisterConsumer implements MessageListenerConcurrently {
    @Resource
    private RocketMQProperties rocketMQProperties;

    @PostConstruct
    public void init() throws MQClientException {
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("defaultMqConsumer");
        consumer.setNamesrvAddr(rocketMQProperties.getNameServer());
        consumer.subscribe("DEFAULT_TOPIC", "*");
        consumer.registerMessageListener(this);
        consumer.start();
    }


    @Override
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) {
        list.forEach(msg ->{
            byte[] msgBody = msg.getBody();
            Object message = JSONObject.parse(msgBody);
            System.out.println("消费消息:"+message);
        });
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    }
}