栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

阿里云服务器Docker中RocketMQ的安装与使用和Springboot集成配置

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

阿里云服务器Docker中RocketMQ的安装与使用和Springboot集成配置

文章目录

阿里云服务器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.1
3、启动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.1
4.进入容器,修改配置文件

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号