javascript
Rocketmq基于docker部署并在Springboot中接入
服務(wù)器部署
關(guān)于在服務(wù)器上安裝docker并啟動(dòng)守護(hù)進(jìn)程,這里不再贅述,此處假設(shè)服務(wù)器已經(jīng)安裝完成docker。
安裝并運(yùn)行nameserver
docker run -d -p 9876:9876 -vpwd/data/namesrv/logs:/fddata/rocketmq/logs -vpwd/data/namesrv/store:/fddata/rocketmq/store --name rmqnamesrv rocketmqinc/rocketmq:4.4.0 sh mqnamesrv -n IP:9876
IP填寫(xiě)服務(wù)器對(duì)外暴露的IP地址
tips:
- nameserver的端口無(wú)法修改,因此如果需要集群部署,必須要部署在不同的IP地址中
安裝并運(yùn)行broker
由于在公司中只有一臺(tái)物理機(jī),在一臺(tái)物理機(jī)上部署多臺(tái)master意義并不大,在這里我只部署了一臺(tái)master一臺(tái)slave。部署master和slave,需要讀取不同的配置文件,因此需要基于不同的配置文件構(gòu)建兩個(gè)鏡像。
- master broker.conf
- slave broker.conf
IP這一欄必須要填寫(xiě),否則broker默認(rèn)會(huì)采用內(nèi)網(wǎng)IP,雖然能連上,但是外網(wǎng)無(wú)法訪問(wèn),無(wú)法使用,port一欄可以修改端口,默認(rèn)是10911和10909,如果不想使用這兩個(gè)端口,可以通過(guò)這個(gè)參數(shù)修改,同時(shí)謹(jǐn)記,VIP端口和普通端口-2,所以在設(shè)置端口的時(shí)候不要重復(fù)了.比如master的端口設(shè)置成了8080,name啟動(dòng)的同時(shí)如果沒(méi)有禁用掉VIP端口,那么同時(shí)還會(huì)占用8078端口,設(shè)置slave端口的時(shí)候要避開(kāi)這兩個(gè)端口
- Dockerfile
在當(dāng)前目錄進(jìn)行鏡像打包:docker build -t="broker-m" .,docker build -t="broker-s" .
docker命令
- master
- slave
其中,PORT指向broker端口,PATH指向物理機(jī)中掛載的文件地址

如果看到這三行成功運(yùn)行,表示啟動(dòng)成功

同時(shí)在console界面也能看到一主一從已經(jīng)啟動(dòng)成功。在實(shí)際部署的過(guò)程中,發(fā)現(xiàn)console如果采用docker形式部署,會(huì)出現(xiàn)無(wú)法訪問(wèn)物理機(jī)IP的情況,建議console不要使用docker部署而是直接部署到物理機(jī)上
springboot接入rocketmq
pom文件:
<!-- rocketmq --> <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.1</version> </dependency>producer
在application.propertis中加入
# rocketmq rocketmq.name-server=IP:PORT rocketmq.producer.group=producerGroupIP和PORT填寫(xiě)之前啟動(dòng)nameserver時(shí)的IP和PORT,producer.group指定任意名字
之后在需要使用的地方注入 RocketMQTemplate即可。
SendCallback
如果調(diào)用asyncSend方法,則需要指定回調(diào)方法用于發(fā)送成功后的處理
consumer
在application.propertis中加入
# rocketmq rocketmq.name-server=IP:PORTIP和PORT填寫(xiě)之前啟動(dòng)nameserver時(shí)的IP和PORT
RocketMQListener
編寫(xiě)類(lèi)實(shí)現(xiàn) RocketMQListener 接口, RocketMQListener接收一個(gè)泛型作為參數(shù),經(jīng)測(cè)試常用或者說(shuō)實(shí)用的就兩種: String 和 MessageExt,其中, String類(lèi)型接收的參數(shù)即為生產(chǎn)者發(fā)送的消息內(nèi)容, MessageExt則包含了除消息內(nèi)容之外的許多東西,可以按需實(shí)用。如果實(shí)用MessageExt,那么接收到的消息是byte數(shù)組,可以使用String res = new String(message.getBody(), CharEncoding.UTF_8)該行代碼來(lái)轉(zhuǎn)為 String
總結(jié)
至此整體部署就已經(jīng)完成了,這里不得不吐槽一下,文檔缺失的內(nèi)容實(shí)在是有點(diǎn)多,真是符合了程序員最討厭的兩件事:1.接手的項(xiàng)目沒(méi)有文檔 2.自己寫(xiě)文檔
轉(zhuǎn)載于:https://www.cnblogs.com/cbzj/p/10826238.html
總結(jié)
以上是生活随笔為你收集整理的Rocketmq基于docker部署并在Springboot中接入的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: exam02-02
- 下一篇: [19/05/26-星期日] JavaS