1.RocketMq部署
本文詳細介紹了安裝rocketMq 前後的方法和一些注意事項 ,設備爲centos7,話不多說,begin。
準備工作
建議把jdk,maven,git先都裝上。
RocketMq程序的獲取
首先需要獲取rocketMq的程序,源程序或可執行包都可以,這邊直接獲取可執行程序。
wget http://www-us.apache.org/dist/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip
//如果已經有可以解壓zip的程序,可省去這一步
yum install zip unzip
//這邊可以使用-d指定解壓縮的位置
unzip rocketmq-all-4.2.0-bin-release.zip
這樣操作的話會在當前目錄下生成一個rocketmq的文件夾,進入該文件夾
cd rocketmq
編輯bin目錄下的 runserver.sh,runbroker.sh,tools.sh 這三個文件,修改位置分別爲
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m -XX:MetaspaceSize=12m -XX:MaxMetaspaceSize=32m"
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn50m"
JAVA_OPT="${JAVA_OPT} -server -Xms100m -Xmx100m -Xmn25m -XX:PermSize=12m -XX:MaxPermSize=12m"
根據自己的配置酌情設置就行了。
接着開放一下端口,這個是iptables的策略,包括
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9876 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10911 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10909 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
然後重啓
service iptables restart
建議把 10910加上,避免不必要的麻煩。一般雲主機在控制檯都可以直接編輯,如果沒有iptables,firewall就自己看着辦吧。
啓動NameServer
nohup sh bin/mqnamesrv &
//之後回車就行了,可以根據提示查看一下nohup.out的輸出內容,是否出現成功字樣
啓動Broker
先配置一下ip,目的是爲了可以使用公網ip可以訪問到broker。
vim conf/broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr=xxxx:9876
brokerIP1=xxxx
啓動
//這邊的ip可以是localhost,指定本機ip應該也可以
nohup sh bin/mqbroker -n xxxx:9876 autoCreateTopicEnable=true -c conf/broker.conf &
查看log日誌
log日誌位於~/logs/rocketmqlogs/ 路徑下,包括但不限於namesrv.log和broker.log。注意broker日誌內容的broker的ip得是公網ip,外部機器纔可以訪問到。
2.運維工具部署
獲取程序
git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
cd rocketmq-externals/rocketmq-console/
參數配置
vi src/main/resources/application.properties
照着這個改就行了。
#管理後臺訪問上下文路徑,默認爲空,如果填寫,一定要前面加“/”,後面不要加,否則啓動報錯
server.contextPath=/rocketmq
#訪問端口
server.port=8080
#spring.application.index=true
spring.application.name=rocketmq-console
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#logback配置文件路徑
logging.config=classpath:logback.xml
#if this value is empty,use env value rocketmq.config.namesrvAddr NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876
#Name Server地址,修改成你自己的服務地址
rocketmq.config.namesrvAddr=xxxx:9876
#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true
rocketmq.config.isVIPChannel=
#rocketmq-console’s data path:dashboard/monitor
rocketmq.config.dataPath=/tmp/rocketmq-console/data
#set it false if you don’t want use dashboard.default true
rocketmq.config.enableDashBoardCollect=true
運行程序
沒有mvn,自行安裝。https://www.cnblogs.com/clicli/p/5866390.html
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-console-ng-1.0.0.jar
啓動成功後訪問http://localhost:8080/rocketmq就可以了,當然是服務器的ip地址了。
3.實際測試
代碼獲取
代碼我偷的,不會用,主要是拿來先測一下。
//依賴
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.rocketmq</groupId>
<artifactId>rocketmq-all</artifactId>
<version>3.6.2.Final</version>
<type>pom</type>
</dependency>
//Producer
public class Producer {
public static void main(String[] args) throws MQClientException, InterruptedException {
// 聲明並初始化一個producer
// 需要一個producer group名字作爲構造方法的參數,這裏爲producer1
DefaultMQProducer producer = new DefaultMQProducer("producer1");
producer.setVipChannelEnabled(false);
// 設置NameServer地址,此處應改爲實際NameServer地址,多個地址之間用;分隔
// NameServer的地址必須有
// producer.setClientIP("xxxx");
// producer.setInstanceName("Producer");
producer.setNamesrvAddr("xxxx:9876");
// 調用start()方法啓動一個producer實例
producer.start();
// 發送1條消息到Topic爲TopicTest,tag爲TagA,消息內容爲“Hello RocketMQ”拼接上i的值
try {
// 封裝消息
Message msg = new Message("TopicTest",// topic
"TagA",// tag
("Hello RocketMQ").getBytes(RemotingHelper.DEFAULT_CHARSET)// body
);
// 調用producer的send()方法發送消息
// 這裏調用的是同步的方式,所以會有返回結果
SendResult sendResult = producer.send(msg);
// 打印返回結果
System.out.println(sendResult);
} catch (RemotingException e) {
e.printStackTrace();
} catch (MQBrokerException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//發送完消息之後,調用shutdown()方法關閉producer
System.out.println("send success");
producer.shutdown();
}
}
//Consumer
public class Consumer {
public static void main(String[] args) throws InterruptedException, MQClientException {
//聲明並初始化一個consumer
//需要一個consumer group名字作爲構造方法的參數,這裏爲consumer1
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer1");
//consumer.setVipChannelEnabled(false);
//同樣也要設置NameServer地址
consumer.setNamesrvAddr("xxxx:9876");
//這裏設置的是一個consumer的消費策略
//CONSUME_FROM_LAST_OFFSET 默認策略,從該隊列最尾開始消費,即跳過歷史消息
//CONSUME_FROM_FIRST_OFFSET 從隊列最開始開始消費,即歷史消息(還儲存在broker的)全部消費一遍
//CONSUME_FROM_TIMESTAMP 從某個時間點開始消費,和setConsumeTimestamp()配合使用,默認是半個小時以前
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//設置consumer所訂閱的Topic和Tag,*代表全部的Tag
consumer.subscribe("TopicTest", "*");
//設置一個Listener,主要進行消息的邏輯處理
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.println(Thread.currentThread().getName() + " Receive New Messages: " + msgs);
System.out.println("----------------------------------------------------------------------------------");
//返回消費狀態
//CONSUME_SUCCESS 消費成功
//RECONSUME_LATER 消費失敗,需要稍後重新消費
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//調用start()方法啓動consumer
consumer.start();
System.out.println("Consumer Started.");
}
}
---------------------
作者:innerpeacez
來源:CSDN
原文:https://blog.csdn.net/zhwyj1019/article/details/80264698
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!
運行
先啓動哪個程序不用我多說了8。
4.開始學習~
主要還欠缺控制檯的權限驗證和綁定消費者時的權限驗證。之後可以擴展多個nameserver保證可用性,擴展broker嘗試負載均衡。