去github上直接搜索RocketMQ,搜索结果出现/rocketmq 进去其中进行下载 ali将其捐献给了apache,进入一下的网址 安装步骤操作 本人现在的时源码自己编译的的
> nohup sh bin/mqnamesrv &
> tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
> nohup sh bin/mqbroker -n localhost:9876 &
> tail -f ~/logs/rocketmqlogs/broker.log
The broker[%s, 172.30.30.233:10911] boot success...
~/rocketmq-all-4.2.0/distribution/target/apache-rocketmq/bin/nohup.out
在启动mqbroker时出现此情况说明内存不足 需要修改配置后再启动
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeType=JSON
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 8589934592 bytes for committing reserved memory.
# An error report file with more information is saved as:
修改方式如下
如果服务器内存不够,可以修改runbroker.sh脚本(mqbroker文件中通过runbroker.sh脚本调用Broker的主函数com.alibaba.rocketmq.broker.BrokerStartup启动Broker)的JAVA_OPT_1参数
~/rocketmq-all-4.2.0/distribution/target/apache-rocketmq/bin/runbroker.sh将其中的参数
JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g" 修改 根据实际情况修改 参数值
启动完成后使用jps查看 会有NamesrvStartup和BrokerStartup出现 启动成功
使用java测试消息发送
package test.data.com.roeckMQ; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.consumer.ConsumeFromWhere; import org.apache.rocketmq.common.message.Message; import org.apache.rocketmq.common.message.MessageExt; import java.util.List; /** * @param * @param * @param * @author HUAZAI * @title: * @description: * @return 返回类型 : ** * *
* @throws * @date 18-5-3 下午6:45 */ public class Consumer { private static final Logger logger = LogManager.getLogger(Consumer.class);//log4j2 日志 public static void main(String[] args){ Boolean isloadconfig = Boolean.parseBoolean(System.getProperty("rocketmq.client.log.loadconfig", "true")); System.setProperty("rocketmq.client.log.loadconfig","false");//设置rocketMQ是否使用自己的日志配置 false不使用 默认为true使用 System.out.println(isloadconfig); DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("PushConsumer"); consumer.setNamesrvAddr("192.168.2.82:9876");//设置监听的地址 try { //订阅PushTopic下Tag为push的消息 consumer.subscribe("PushTopic", "push"); //程序第一次启动从消息队列头取数据 consumer.setConsumeFromWhere( ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.registerMessageListener( new MessageListenerConcurrently() { public ConsumeConcurrentlyStatus consumeMessage( List
list, ConsumeConcurrentlyContext Context) { Message msg = list.get(0); logger.info(msg.toString()); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } } ); consumer.start(); } catch (Exception e) { e.printStackTrace(); } } }
package test.data.com.roeckMQ; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq.common.message.Message; /** * @param * @param * @param * @author HUAZAI * @title: * @description: * @return 返回类型 : ** * *
* @throws * @date 18-5-3 下午6:37 */ public class Producer { private static final Logger logger = LogManager.getLogger(Producer.class); public static void main(String[] args){ Boolean isloadconfig = Boolean.parseBoolean(System.getProperty("rocketmq.client.log.loadconfig", "true")); System.setProperty("rocketmq.client.log.loadconfig","false"); System.out.println(isloadconfig); DefaultMQProducer producer = new DefaultMQProducer("Producer"); producer.setNamesrvAddr("192.168.2.82:9876"); try { producer.start(); Message msg = new Message("PushTopic", "push", "1", "Just for test.".getBytes()); SendResult result = producer.send(msg); logger.info("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PushTopic", "push", "2", "Just for test.".getBytes()); result = producer.send(msg); logger.info("id:" + result.getMsgId() + " result:" + result.getSendStatus()); msg = new Message("PullTopic", "pull", "1", "Just for test.".getBytes()); result = producer.send(msg); logger.info("id:" + result.getMsgId() + " result:" + result.getSendStatus()); } catch (Exception e) { e.printStackTrace(); }finally{ producer.shutdown(); } } }
其中的rocketMQ自己的日志
rocketmq客户端会打印一些日志如消费进度,心跳等,默认的是滚动10个日志文件,每个100MB,又一次看到这个日志目录有几十GB,手动删除,但是悲剧的是rocketmq没有释放这个日志目录,导致不能真正的释放磁盘空间。
于是研究了下怎么配置rocketmq客户端日志配置。
客户端日志配置ClientLogger这个类里,支持log4j和logback两种日志,默认是从缺省的日志文件加载,rocketmq-client这个工程的类目下有两个日志配置文件。
首先禁用掉rocektmq自己加载日志文件,有一个isloadconfig属性默认为true,可以在自己代码设置为false
Boolean isloadconfig = Boolean.parseBoolean(System.getProperty("rocketmq.client.log.loadconfig", "true"));
停止服务
> sh bin/mqshutdown broker
The mqbroker(36695) is running...
Send shutdown request to mqbroker(36695) OK
> sh bin/mqshutdown namesrv
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK
参考
https://blog.csdn.net/wyfk2013/article/details/78218221
https://blog.csdn.net/a19881029/article/details/34446629