阿里云服务器Docker中RocketMQ的安装与使用
1.搜索镜像2、启动NameServer:3、启动broker:4.进入容器,修改配置文件5.下载rocketmq console控制台 SpringBoot集成Rocketmq
阿里云服务器Docker中RocketMQ的安装与使用 1.搜索镜像docker search rocketmq
curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags
| tr -d '[[]" ]' | tr '}' 'n'
| awk -F: -v image='镜像名称' '{if(NR!=NF && $3 != ""){printf("%s:%sn",image,$3)}}'
下面的就是分步启动nameserver和broker。
2、启动NameServer:docker run -d -p 9876:9876 --name rmqserver foxiswho/rocketmq:server-4.5.13、启动broker:
docker run -d -p 10911:10911 -p 10909:10909 --name rmqbroker --link rmqserver:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPTS=-Duser.home=/opt" -e "JAVA_OPT_EXT=-server -Xms128m -Xmx128m" foxiswho/rocketmq:broker-4.5.14.进入容器,修改配置文件
Broker容器中默认的配置文件的路径为:/etc/rocketmq/broker.conf
# 进入容器 docker exec -it 容器id /bin/bash # 进入目录,找到配置文件broker.conf cd /etc/rocketmq # 修改broker.conf vim broker.conf # 在最后添加一行添加服务器公网IP brokerIP1=服务器公网IP
broker.conf brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH brokerIP1 = 公网IP autoCreateTopicEnable=true
退出容器 exit 重启容器 docker stop 容器id docker start 容器id
然后通过如下命令检查一下启动情况:
docker ps|grep rocketmq
说明服务已启动
5.下载rocketmq console控制台如果一切正常,NameServer和Broker一会儿就会安装好,为了管理上的方便,rocketmq console也是必不可少的工具了,通过上面查询的方式找到需要启动的版本,启动方式如下:
查找到需要启动的版本
curl https://registry.hub.docker.com/v1/repositories/foxiswho/rocketmq/tags
| tr -d '[[]" ]' | tr '}' 'n'
| awk -F: -v image='styletang/rocketmq-console-ng' '{if(NR!=NF && $3 != ""){printf("%s:%sn",image,$3)}}'
docker run -d --name rmqconsole -p 8180:8080 --link rmqserver:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -t styletang/rocketmq-console-ng
然后通过如下命令检查一下启动情况:
docker ps|grep rocketmq
再通过浏览器访问http://服务器公网IP:8180,console的页面显示如下:
查看集群地址:确保为服务器公网IP地址
SpringBoot集成Rocketmq- POM.xml 2.2.0对应rocketmq4.8.0,2.1.1对应rocketmq4.7.1,不过影响不大
org.apache.rocketmq rocketmq-spring-boot-starter 2.1.1
- application.properties
#Rocketmq server rocketmq.name-server=http://公网IP:9876 rocketmq.producer.group=blog_group rocketmq.producer.send-message-timeout=10000
- ArticleListener
import com.alibaba.fastjson.JSON; import com.happyhao.blog.common.dto.JsonResult; import com.happyhao.blog.common.vo.ArticleMessage; import com.happyhao.blog.service.ArticleService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; import org.apache.rocketmq.spring.annotation.RocketMQMessageListener; import org.apache.rocketmq.spring.core.RocketMQListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; import java.time.Duration; import java.util.Set; @Slf4j @Component @RocketMQMessageListener(topic = "blog-update-article",consumerGroup = "blog-update-article-group") public class ArticleListener implements RocketMQListener{ @Autowired private ArticleService articleService; @Autowired private StringRedisTemplate redisTemplate; @Override public void onMessage(ArticleMessage message) { log.info("*****收到的消息:{}",message); //做什么了,更新缓存 //1. 更新查看文章详情的缓存 Long articleId = message.getArticleId(); String params = DigestUtils.md5Hex(articleId.toString()); String redisKey = "view_article::ArticleController::findArticleById::"+params; JsonResult articleResult = articleService.findArticleById(articleId); redisTemplate.opsForValue().set(redisKey, JSON.toJSONString(articleResult), Duration.ofMillis(5 * 60 * 1000)); log.info("*****更新了缓存:{}",redisKey); //2. 文章列表的缓存 不知道参数,解决办法 直接删除缓存 Set keys = redisTemplate.keys("listArticle*"); keys.forEach(s -> { redisTemplate.delete(s); log.info("*****删除了文章列表的缓存:{}",s); }); } }
- 调用:topic必须对应
if (isEdit){
//发送一条消息给rocketmq 当前文章更新了,更新一下缓存吧
ArticleMessage articleMessage = new ArticleMessage();
articleMessage.setArticleId(article.getId());
rocketMQTemplate.convertAndSend("blog-update-article",articleMessage);
}
参考博客:
https://blog.csdn.net/fenglibing/article/details/92378090
https://blog.csdn.net/qq_41773240/article/details/104247817
结合了这两篇重装 | 第二个问题是显示sendDefaultImpl call timeout,在配置里加上自动创建topic就可以!
https://blog.csdn.net/qq_41108614/article/details/106044882



