(二)RabbitMQ工作模式之直接模式(Direct | Work queues)图文教学通俗易懂,SpringBoot集成,超级简单!!

教程相关代码:RabbitMQ入门教程——GitHub

1.直接模式(Direct)

直接模式(Direct)也叫 Work queues。
我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。
在这里插入图片描述

  • 直接模式是不需要配置交换机的,使用系统默认的交换机,默认交换机什么都不干,只是“走个形式”
  • 多个消费者可以监听同一个队列,采用轮询的方式将消息平均分发给消费者,也就是负载均衡
  • 消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

2.实现

2.1 创建队列

使用浏览器进入rabbitmq管理页面,进入queues子页面
在这里插入图片描述
按照步骤创建一个新的队列,成功后就如图中的红框部分一样就行。
名词解释:
Durability:是否做持久化 Durable(持久) transient(临时)
Auto delete : 是否自动删除

2.2 代码编写

采用SpringBoot架构,写起来简单

2.2.1 环境准备

创建maven项目,导入坐标,删除src文件夹,以下坐标是放在父工程中。

	<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

创建子模块direct
在这里插入图片描述
创建SpringBoot的启动类,com.lois.direct.DirectApplication.class

@SpringBootApplication
public class DirectApplication {
    public static void main(String[] args) {
        SpringApplication.run(DirectApplication.class,args);
    }
}
2.2.2 目录结构

这个贴出来只是为了让读者有一个总体概念,不需要创建,在后面会一步步创建
在这里插入图片描述

2.2.3 生产者
2.2.3.1 编写生产者

在Test包中创建生产者测试类,com.lois.test.ProducerTest.class

@RunWith(SpringRunner.class)
@SpringBootTest(classes = DirectApplication.class)
public class ProducerTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend("queue1","直接模式测试");
    }
}

注:rabbitTemplate.convertAndSend(队列名称,传递的信息)

2.2.3.2 测试生产者

运行testSend()方法,打开RabbitMQ管理界面,可以看到如图信息:
在这里插入图片描述
这代表着生产者生产了一条信息并且成功发送给了MQ,暂时存储在队列中。

2.2.4 消费者
2.2.4.1 编写消费者

在java包中创建消费者类,com.lois.direct.customer.Customer1

@Component
@RabbitListener(queues = "queue1")
public class Customer1 {
    @RabbitHandler
    public void showMessage(String message){
        System.out.println("Customer接受到的信息:"+message);
    }
}

@Component 让SpringBoot扫描到该类
@RabbitListener(queues = “监听的队列名称”)
@RabbitHandler 监听处理方法

2.2.4.2 测试消费者

运行DirectApplication.class,在控制台就能看见输出:
在这里插入图片描述
此时,MQ管理页面也能看见消息数量变为0

3.多个消费者监听同一队列

此时我们需要运行起多个SpringBoot,所以我们需要修改一下端口号,在resources下创建application.yml,内容我们稍后再写。

再修改 运行配置
在这里插入图片描述
在这里插入图片描述
将只能运行一个 选项 取消

3.1运行多个消费者

这里我们运行三个消费者

修改application.yml内容

server:
  port: 9001

修改消费者类代码

@Component
@RabbitListener(queues = "queue1")
public class Customer1 {
    @RabbitHandler
    public void showMessage(String message){
        System.out.println("Customer11111接受到的信息:"+message);
    }
}

输出 Customer11111 更好识别
运行DirectApplication.class

如此往复运行起三个消费者 (修改application.yml内容、修改消费者类代码、运行DirectApplication.class 注:端口号和Customer都要+1

3.2 运行生产者

此时我们运行一次生产者代码,
在这里插入图片描述
在这里插入图片描述
发现只有第一个消费者接受到了消息。

如此我们再运行一次生产者,发现第二个消费者接受到了消息,而其他两个没变。
再运行第三次,发现第三个消费者接受到了消息,其他两个没变。

所以我们可以得知,直接模式下,多个消费者监听同一个队列是采用轮询的方式,也算一个负载均衡。

上一章节:RabbitMQ简单入门教程
下一章节:RabbitMQ工作模式之分裂模式

相关链接:
RabbitMQ简单入门教程
RabbitMQ工作模式之直接模式
RabbitMQ工作模式之分裂模式
RabbitMQ工作模式之主题模式

作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!
作者编写不易,转载请注明我的博客,如果觉得写的不错的话,请随手点个赞,谢谢!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值