RocketMQ安装和简单使用

说明:RocketMQ与RabbitMQ一样,是分布式架构中的一个组件,用来解决微服务之间的异步调用。同类的还有两个,各自的特点如下:

RocketMQ安装和简单使用_第1张图片

Rocket结构

服务启动时

RocketMQ安装和简单使用_第2张图片

发送消息时

RocketMQ安装和简单使用_第3张图片

其中各个部分的功能如下:

(1)生产者:

  • 发送消息到MQ中的某个Topic;

  • 多个相同的消息发送吴福气可以构成一个生产者集群;

  • 在消息生产者集群中可以实现事务补偿;

(2)消费者:

  • 监听MQ中的某个Topic中的消息;

  • 一个Topic可以被多个消费者监听;

  • 多个消息消费者如果监听了同一个Topic可以构成一个消费者集群;

(3)消息服务器:

  • 接收消息、提供消息、消息持久化、过滤消息;

(4)命名服务器:

  • 管理Broker服务器;

  • 生产者发送消息要连接到命名服务器;

  • 消费者接收消息要连接到命名服务器;

安装

第一步:下载

首先,去官网上下载安装包,我这里下载最新的5.1.3版本

RocketMQ安装和简单使用_第4张图片

第二步:解压

安装完成后,复制到云服务器上部署启动,解压

unzip 压缩包名

RocketMQ安装和简单使用_第5张图片

第三步:修改配置

解压完成后,进入到bin目录,修改这两个文件中的JAVA_OPT值,改小一点,避免启动失败;

(文件1)

vim runserver.sh

RocketMQ安装和简单使用_第6张图片

(文件2)

vim runbroker.sh

RocketMQ安装和简单使用_第7张图片

(文件3)

修改conf/broker.conf文件,添加这行配置brokerRole = ASYNC_MASTER,表示将该broker设置为异步主节点,我当前的版本默认已添加,可跳过;

vim ../conf/broker.conf

RocketMQ安装和简单使用_第8张图片

启动

进入bin目录,先启动命名服务,再启动broker服务

./mqnamesrv

尴尬,云服务器空间不够,还是换虚拟机吧

在这里插入图片描述

命名服务启动成功

在这里插入图片描述

此时另外开一个会话,进入到bin目录,启动broker服务,指定端口为9876;

./mqbroker -n localhost:9876

broker服务启动成功;

在这里插入图片描述

注:如果出现权限不够,可以输入下面的命令,将rocketmq文件夹权限设置为777

chmod -R 777 rocketmq文件夹目录

使用

简单创建两个模块,一个消费者,一个生产者,同属于一个父模块,父模块的依赖如下:


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.hzygroupId>
    <artifactId>essay-rocketmqartifactId>
    <packaging>pompackaging>
    <version>1.0-SNAPSHOTversion>
    <modules>
        <module>consumermodule>
        <module>producermodule>
    modules>

    <properties>
        <maven.compiler.source>11maven.compiler.source>
        <maven.compiler.target>11maven.compiler.target>
        <spring-boot.version>2.3.12.RELEASEspring-boot.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>org.apache.rocketmqgroupId>
            <artifactId>rocketmq-spring-boot-starterartifactId>
            <version>2.0.4version>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>${spring-boot.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.8.1version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>${spring-boot.version}version>
                <configuration>
                    <mainClass>com.hzy.springbootrocketmq.SpringbootRocketmqApplicationmainClass>
                    <skip>trueskip>
                configuration>
                <executions>
                    <execution>
                        <id>repackageid>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
project>

消费者(consumer)配置文件

server:
  port: 8081
# 配置RocketMQ命名服务器地址
rocketmq:
  name-server: 192.168.101.65:9876

生产者(producer)配置文件,需要设置一个producer.group

server:
  port: 8082
# 配置RocketMQ命名服务器地址
rocketmq:
  name-server: 192.168.101.65:9876
  producer:
    group: groupA

下面在生产者的测试类里面,发送消息,看消费者那边能不能接收到;

(生产者代码)

@SpringBootTest
public class RocketTest {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @Test
    public void simpleTest(){
        rocketMQTemplate.syncSend("simple","hello rocketmq!");
    }
}

(消费者代码,创建一个监听器类,如下)

@Component
@RocketMQMessageListener(consumerGroup = "groupA", topic = "simple")
public class ConsumerListener implements RocketMQListener<String> {
    @Override
    public void onMessage(String s) {
        System.out.println("s = " + s);
    }
}

启动消费者,再启动这个测试类,查看结果:

(发送完成)

RocketMQ安装和简单使用_第9张图片

(成功接收)

RocketMQ安装和简单使用_第10张图片

你可能感兴趣的:(java-rocketmq,rocketmq,java)