拉取镜像
docker pull apache/rocketmq:4.7.1
运行mq容器
docker run -d \
--restart=always \
--name rocketmq-namesrv-4.7.1 \
-p 9876:9876 \
-m 1024m \
-v /usr/local/scapro/env/rocketmq/data/namesrv/logs:/root/logs \
-v /usr/local/scapro/env/rocketmq/data/namesrv/store:/root/store \
apache/rocketmq:4.7.1 sh mqnamesrv
将容器中conf配置拷贝到指定目录并修改
docker cp rocketmq-namesrv-4.7.1:/home/rocketmq/rocketmq-4.7.1/conf /usr/local/scapro/env/rocketmq/broker/broker-a/
运行broker容器
docker run -d \
--name rocketmq-broker-a \
--restart=always \
-p 10909:10909 \
-p 10911:10911 \
-m 2048m \
-v /usr/local/scapro/env/rocketmq/broker/broker-a/logs:/root/logs \
-v /usr/local/scapro/env/rocketmq/broker/broker-a/store:/root/store \
-v /usr/local/scapro/env/rocketmq/broker/broker-a/conf:/home/rocketmq/rocketmq-4.7.1/conf \
-e "JAVA_OPT_EXT=-server -Xms1g -Xmx1g -Xmn512m" apache/rocketmq:4.7.1 sh mqbroker -c /home/rocketmq/rocketmq-4.7.1/conf/broker.conf
运行mq控制台容器
docker run -d \
--restart=always \
--name rmqadmin \
-m 2048m \
-e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.85.131:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \
-p 5001:8080 \
pangliang/rocketmq-console-ng
安装完毕如何测试呢?接下来教给你。
生产者测试main
public static void main(String[] args) throws Exception {
//实例化消息生产者,参数是producerGroup
DefaultMQProducer producer = new DefaultMQProducer("laogong");
//设置nameserver的地址
producer.setNamesrvAddr("192.168.85.131:9876");
//启动producer
producer.start();
//发送消息
Message msg = new Message("xiaoxianrou", "这是我的第一次".getBytes());
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
//批量发送
// List<Message> msgs = new ArrayList<>();
// for (int i = 0; i < 100; i++) {
// Message msg = new Message("xiaoxianrou", ("这是我的第" + i + "次").getBytes());
// msgs.add(msg);
// }
// SendResult sendResult = producer.send((Message) msgs);
// System.out.printf("%s%n", sendResult);
//关闭producer
producer.shutdown();
System.out.println("已关闭producer实例");
}
消费者测试main
public static void main(String[] args) throws InterruptedException, MQClientException {
// 通过push模式消费消息,指定消费者组
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("sanyouConsumer");
// 指定NameServer的地址
consumer.setNamesrvAddr("192.168.85.131:9876");
// 订阅这个topic下的所有的消息
consumer.subscribe("xiaoxianrou", "*");
// 注册一个消费的监听器,当有消息的时候,会回调这个监听器来消费消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
System.out.printf("消费消息:%s", new String(msg.getBody()) + "\n");
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 启动消费者
consumer.start();
System.out.printf("Consumer Started.%n");
}