setup 1:rocketmq下载
地址:http://rocketmq.apache.org/release_notes/release-notes-4.7.1/
[root@localhost ~]# wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.1/rocketmq-all-4.7.1-bin-release.zip
setup 2 解压
[root@localhost usr]# cd /usr[root@localhost usr]# unzip /root/Downloads/rocketmq-all-4.7.1-bin-release.zip[root@localhost usr]# ln -s rocketmq-all-4.7.1-bin-release/ rocketmq-4.7.1[root@localhost usr]# lltotal 15040-rw-r--r--. 1 root root 15144960 Jul 24 15:44 bb.tardr-xr-xr-x. 2 root root 45056 Jul 2 09:52 bindrwxr-xr-x. 2 root root 6 May 11 2019 gamesdrwxr-xr-x. 41 root root 8192 Jun 10 10:13 includedr-xr-xr-x. 37 root root 4096 Jun 8 09:51 libdr-xr-xr-x. 119 root root 73728 Jul 2 09:52 lib64drwxr-xr-x. 50 root root 12288 Jun 8 09:51 libexecdrwxr-xr-x. 18 root root 285 Aug 27 14:07 locallrwxrwxrwx. 1 root root 31 Jul 22 10:59 rocketmq-4.7.1 -> rocketmq-all-4.7.1-bin-release/drwxr-xr-x. 2 root root 6 Aug 27 17:05 rocketmq-all-4.7.1-bin-releasedr-xr-xr-x. 2 root root 16384 Jul 2 10:54 sbindrwxr-xr-x. 219 root root 8192 Jul 2 09:52 sharedrwxr-xr-x. 4 root root 34 May 20 19:33 srclrwxrwxrwx. 1 root root 10 May 11 2019 tmp -> ../var/tmp[root@localhost usr]# vim ~/.bashrc (根据自己需要是否增加环境变量)export PATH=/usr/local/rocketmq/bin:$PATH
setup 3 修改配置
[root@localhost local]# cd rocketmq[root@localhost rocketmq]# lltotal 40drwxr-xr-x. 2 root root 83 Jun 24 14:49 benchmarkdrwxr-xr-x. 3 root root 4096 Aug 27 17:14 bindrwxr-xr-x. 6 root root 237 Aug 27 17:12 confdrwxr-xr-x. 2 root root 4096 Jun 24 14:49 lib-rw-r--r--. 1 root root 17336 Jun 2 14:09 LICENSE-rw-r--r--. 1 root root 1338 Jun 2 14:09 NOTICE-rw-r--r--. 1 root root 5069 Jun 24 14:02 README.md[root@localhost rocketmq]#
(在由于演示机子内存有限,所以根据实际应用,配置内存)
[root@localhost rocketmq]# vim bin/runbroker.shchoose_gc_log_directoryJAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn1g" #<<<<<=====修改这里JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"[root@localhost rocketmq]# vim bin/runserver.shchoose_gc_log_directoryJAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn521m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #<<<<<=====修改这里JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
修改配置:
[root@localhost rocketmq]# vim conf/namesrv.propertieslistenPort=3030[root@localhost rocketmq]# vim conf/broker.confbrokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERflushDiskType = ASYNC_FLUSHnamesrvAddr=127.0.0.1:3030 #这里可以连接多个管理,127.0.0.1:3030,127.0.0.1:3031listenPort=2020#autoCreateTopicEnable=falseaclEnable=true[root@localhost conf]# vim plain_acl.ymlglobalWhiteRemoteAddresses: #去掉所有白名单 #- 10.10.103.* #- 192.168.0.*#保留一个用户- accessKey: admin001 secretKey: 12345678 whiteRemoteAddress: #192.168.1.* # if it is admin, it could access all resources admin: true
setup4 启动服务
[root@localhost bin]# mqnamesrv -c /usr/local/rocketmq/conf/namesrv.properties &[1] 4214[root@localhost bin]# 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 releaseJava HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/jdk1.8.0_251/jre/lib/ext/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/rocketmq-all-4.7.1-bin-release/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]load config properties file OK, /usr/local/rocketmq/conf/namesrv.propertiesThe Name Server boot success. serializeType=JSON[root@localhost ~]# mqbroker -c /usr/local/rocketmq/conf/broker.conf &[1] 4934[root@localhost ~]# SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/jdk1.8.0_251/jre/lib/ext/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/rocketmq-all-4.7.1-bin-release/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]The broker[broker-a, 192.168.1.13:2020] boot success. serializeType=JSON and name server is 127.0.0.1:3030
注意:Linux时候,注意放开这个两个端口
备注:停止服务时候,可以使用mqshutdown
附件:java 与rocketmq连接代码
package test;import GamePlatformServer.classFile.DBConnectO;import GamePlatformServer.classFile.Log;import org.apache.rocketmq.acl.common.AclClientRPCHook;import org.apache.rocketmq.acl.common.SessionCredentials;import org.apache.rocketmq.client.consumer.DefaultLitePullConsumer;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.client.consumer.rebalance.AllocateMessageQueueAveragely;import org.apache.rocketmq.client.producer.DefaultMQProducer;import org.apache.rocketmq.client.producer.SendResult;import org.apache.rocketmq.common.consumer.ConsumeFromWhere;import org.apache.rocketmq.common.message.Message;import org.apache.rocketmq.common.message.MessageExt;import org.apache.rocketmq.common.protocol.heartbeat.MessageModel;import org.apache.rocketmq.remoting.common.RemotingHelper;import org.json.JSONObject;import java.util.List;public class OrderExchangeWorker { private final static String nameSrvUrl="192.168.1.13:3030"; private final static String returnProducerGroup="ReturnOrderDefaultCluster"; //返回给游戏平台 private final static String returnNamespace="ReturnNameSpace"; //返回给游戏平台 private final static String returnTopicClass="returnOrder"; //返回给游戏平台 private final static String noticeProducerGroup="noticeOrderDefaultCluster"; //游戏平台发送过来 private final static String noticeNamespace="noticeNameSpace"; //返回给游戏平台 private final static String noticeTopicClass="noticeOrder"; //游戏平台发送给后台 private final static String user="admin001"; private final static String password="12345678"; public static boolean sendChannelOrderState(String tagsName ,String orderId, JSONObject sssData) throws Exception{ System.out.println(OrderExchangeWorker.nameSrvUrl); DefaultMQProducer producer = new DefaultMQProducer(OrderExchangeWorker.returnNamespace,OrderExchangeWorker.returnProducerGroup,new AclClientRPCHook(new SessionCredentials(OrderExchangeWorker.user,OrderExchangeWorker.password))); producer.setNamesrvAddr(OrderExchangeWorker.nameSrvUrl); producer.start(); String bodyStr=sssData.toString(); Message msg = new Message(OrderExchangeWorker.returnTopicClass, tagsName,orderId , bodyStr.getBytes(RemotingHelper.DEFAULT_CHARSET)); SendResult sendResult = producer.send(msg); System.out.println(sendResult.getSendStatus()); boolean isOk=false; if(sendResult.getSendStatus().toString().equals("SEND_OK")){ isOk=true; } producer.shutdown(); return isOk; } static class GetOrderMsgWorkerThread extends Thread{ //被动获取/* public void run() { System.out.println("asfasdf"); DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(OrderExchangeWorker.noticeNamespace,OrderExchangeWorker.noticeProducerGroup, new AclClientRPCHook(new SessionCredentials(OrderExchangeWorker.user, OrderExchangeWorker.password)),new AllocateMessageQueueAveragely()); consumer.setNamesrvAddr(OrderExchangeWorker.nameSrvUrl); consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); consumer.setMessageModel(MessageModel.CLUSTERING); try { consumer.subscribe(OrderExchangeWorker.noticeTopicClass, "*"); consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List mgs, ConsumeConcurrentlyContext consumeconcurrentlycontext) { for (MessageExt s:mgs){ try { System.out.println(s.getKeys() + "==被动==>" + new String(s.getBody())+s.getTags()); }catch (Exception e){ e.printStackTrace(); Log.errorLog(e.getMessage()); Log.errorLog(e.getStackTrace()); } } System.out.println("*********************"); return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); } catch (Exception e) { e.printStackTrace(); } }*/ //主动获取 private DefaultLitePullConsumer pullConsumer; public GetOrderMsgWorkerThread () throws Exception{ this.pullConsumer=new DefaultLitePullConsumer(OrderExchangeWorker.noticeNamespace,OrderExchangeWorker.noticeProducerGroup,new AclClientRPCHook(new SessionCredentials(OrderExchangeWorker.user,OrderExchangeWorker.password))); this.pullConsumer.setNamesrvAddr(nameSrvUrl); this.pullConsumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); this.pullConsumer.setMessageModel(MessageModel.BROADCASTING); //this.pullConsumer.setMessageModel(MessageModel.CLUSTERING); System.out.println("=======>"); this.pullConsumer.subscribe(OrderExchangeWorker.noticeTopicClass,"*"); this.pullConsumer.start(); } @Override public void run() { while (true){ try { //拉取消息,无消息时会阻塞 List msgs = pullConsumer.poll(); for (MessageExt s:msgs){ try { System.out.println(s.getKeys() + "==主动拉取==>" + new String(s.getBody())+s.getTags()); }catch (Exception e){ e.printStackTrace(); Log.errorLog(e.getMessage()); Log.errorLog(e.getStackTrace()); } } pullConsumer.commitSync(); System.out.println("*********************"); }catch (Exception e){ e.printStackTrace(); Log.errorLog(e.getMessage()); Log.errorLog(e.getStackTrace()); } } } }}