环境:
我是在本机电脑安装的docker模拟linux环境用于测试rocketmq
首先网上下载rocketmq
在创建docker先分配好端口(下面的20002到20004端口是提供给rocketmq的linstenPort,默认是10909和10911,因为找了很久的资料都不知道怎么修改rocketmq的listenPort指向宿主机器的端口,所以知道保证映射进去和反射出来的端口一直就好)
docker run -itd -p 20000:22 -p 20001:9876 -p 20002-20004:20002-20004 --name rocketmq centos:6.7 (centos:6.7是我自己建的镜像image)
解压到linux目录中
启动namesrv
nohup ./bin/mqnamesrv -n 127.0.0.1:9876 &
启动broker
vi ./conf/broker.conf
添加两行:
brokerIP1=192.168.1.101(指定外网ip或宿主机器ip)
listenPort=20004
nohup ./bin/mqbroker -n 127.0.0.1:9876 -c ./conf/broker.conf &
添加或修改topic
./bin/mqadmin updateTopic -t topic -n 127.0.0.1:9876 -b 127.0.0.1:20004
删除topic
./bin/mqadmin deleteTopic -n 127.0.0.1:9876 -t topic -c DefaultCluester
新增修改订阅组
./bin/mqadmin updateSubGroup -g GID_group -b 127.0.0.1:20004
删除订阅组
./bin/mqadmin deleteSubGroup -g GID_group -b 127.0.0.1:20004 -n 127.0.0.1:9876
查看集群消息
./bin/mqadmin clusterList -n 127.0.0.1:9876
到此一个group=GID_group topic=topic 的rocketmq消息队列已经完成了,在宿主机器只要连127.0.0.1:20001即可
java Producer demo
public static void main(String[] args) { DefaultMQProducer producer = new DefaultMQProducer(); producer.setProducerGroup("GID_group"); producer.setNamesrvAddr("127.0.0.1:20001"); try { producer.start(); SendResult send = producer.send(new Message("topic","test","give a test".getBytes())); if (send != null) { System.out.println("发送消息"); } } catch (Exception e) { e.printStackTrace(); } producer.shutdown(); }
java consumer demo
public static void main(String[] args) { System.out.println("消息端调用..."); DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("GID_group"); consumer.setNamesrvAddr("127.0.0.1:20001"); try { consumer.subscribe("topic", "*"); consumer.registerMessageListener(new MessageListenerOrderly() { @Override public ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) { list.forEach(msg -> { System.out.println("tags:"+msg.getTags()+",body:"+msg.getBody()); }); return ConsumeOrderlyStatus.SUCCESS; } }); // consumer.registerMessageListener(new MessageListenerConcurrently() { // @Override // public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) { // return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; // } // }); consumer.start(); } catch (Exception e) { e.printStackTrace(); } System.out.println("启动成功..."); }
参考: