云服务器从头部署rocketmq

参考文章:

Mac安装rocketmq-优快云博客

RocketMq灰皮书(三)------MQ使用_rocketmqtemplate.convertandsend-优快云博客

操作系统:CentOS 7.9 64位

1 rocketmq安装及配置

下载:

# 更新软件包
sudo yum update -y

# 安装jdk1.8
sudo yum install java-1.8.0-openjdk -y

#配置jdk环境变量
vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
source ~/.bashrc

# 检验是否安装成功
java -version
openjdk version "1.8.0_412"

# 下载rocketmq
wget https://archive.apache.org/dist/rocketmq/5.3.1/rocketmq-all-5.3.1-bin-release.zip

# 解压缩
mv rocketmq-all-5.3.1-bin-release.zip /opt/rocketmq
unzip rocketmq-all-5.3.1-bin-release.zip

配置:

cd /opt/rocketmq/rocketmq-all-5.3.1-bin-release/
vim conf/broker.conf 
brokerIP1 = (公网ip)
namesrvAddr = 127.0.0.1:9876
autoCreateTopicEnable = true # 自动创建topic

# 配置broker启动空间大小
vim bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m" # 初始堆与最大堆大小均为512m
JAVA_OPT="${JAVA_OPT} -Xmn256m # 年轻代大小为256m

# 配置namesrv启动空间大小
vim bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

启动:

# nohup: 退出终端不会影响程序的运行。
# &:让命令在后台执行, 退出终端不再执行。
nohup sh bin/mqnamesrv &

# 此处一定要加上--enable-proxy, 否则本地无法访问到云服务上的rocketmq, 因为即便配置了brokerIP1为
公网ip, nameserver上记录的broker的ip地址仍然为私网ip,而非公网ip
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy &


# 查看启动日志
cat nohup.out
The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876
Sun Dec 08 21:23:11 CST 2024 rocketmq-proxy startup successfully

# 查看代理日志
cat ~/logs/rocketmqlogs/proxy.log | grep success

INFO main - The broker[broker-a, (公网ip):10911] boot success. serializeType=JSON and name server is localhost:9876
INFO main - grpc server start successfully.
INFO main - Sun Dec 08 21:23:11 CST 2024 rocketmq-proxy startup successfully

# 关闭命令(或jps 再kill进程pid):
sh bin/mqshutdown broker 
sh bin/mqshutdown namesrv


2 rocketmq-dashboard安装及配置

# 下载
wget https://dist.apache.org/repos/dist/release/rocketmq/rocketmq-dashboard/2.0.0/rocketmq-dashboard-2.0.0-source-release.zip

# 解压
rm rocketmq-dashboard-2.0.0-source-release.zip /opt/rocketmq-dashboard
unzip rocketmq-dashboard-2.0.0-source-release.zip

# 需要用到maven 先下载maven(本地下载,直接上传速度更快)
# 配置环境变量
vim ~/.bashrc
export M2_HOME=/opt/maven/apache-maven-3.9.2
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin
source ~/.bashrc

# 打包
mvn clean package -Dmaven.test.skip=true

# 配置阿里云安全组中端口9090(dashboard启动端口)、10909、10911、9876开放
# 配置linux防火墙9090、10909、10911、9876端口开放
# 查看防火墙状态, 未开启则开启
systemctl status firewalld
# 查看已开启端口
firewall-cmd --list-ports
# 配置
firewall-cmd --permanent --add-port=9090/tcp
firewall-cmd --reload

# 启动dashboard
java -jar /opt/rocketmq-dashboard/rocketmq-dashboard-2.0.0.jar --server.port=9090
或
nohup java -jar /opt/rocketmq-dashboard/rocketmq-dashboard-2.0.0.jar --server.port=9090 &

本地访问公网ip:9090,得到如下界面不报错:则启动成功

3 springboot整合rocketmq

配置:

# pom.xml
<!-- 添加rocketmq依赖 -->
<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.3.1</version>
</dependency>

# application.yml
rocketmq: 
  name-server: 
    (公网ip):9876
  producer: 
    group: producer-group

ProducerController.java

@RestController
public class ProducerController {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @GetMapping("/producer")
    public String index() {
        rocketMQTemplate.convertAndSend("test-topic", "send message");
        rocketMQTemplate.convertAndSend("test-topic", new User("name", 24));
        return "rocketmq-producer";
    }

}

@Data
class User implements Serializable {

    private static final long serialVersionUID = -3486413003967431764L;
    private String name;
    private Integer age;

    User() {}
    User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}

TestTopicListener.java

@Component
@RocketMQMessageListener(topic = "test-topic", consumerGroup = "consumer")
@Slf4j
public class TestTopicListener implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        System.out.println(message);
    }

}

发送请求:curl -X GET "http://localhost:8080/producer"

输出:
send message
{} (有时候User类没办法显示,暂时不确定原因)

dashboard界面:

注意:此处如果本地项目没启动,查找对应的producer会报错:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值