rabbitmq使用springboot实现direct模式

这篇具有很好参考价值的文章主要介绍了rabbitmq使用springboot实现direct模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 Direct模式

  • 类型:direct
  • 特点:Direct模式是fanout模式上的一种叠加,增加了路由RoutingKey的模式。

rabbitmq使用springboot实现direct模式,rabbitmq,spring boot,java-rabbitmq,rabbitmq

二、coding

Ⅰ 生产者 

1、引入相应的pom文件 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xpf</groupId>
    <artifactId>rabbitmq-springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>rabbitmq-springboot</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!--rabbitmq依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
 
            <scope>test</scope>
        </dependency>
    </dependencies>
 
 
</project>

2、配置文件 application.properties

server.port=8080
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin
spring.rabbitmq.virtual-host=/
spring.rabbitmq.host=192.168.199.20
spring.rabbitmq.port=5672

3、写一个生产者 DirectOrderService.java

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class DirectOrderService {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 模拟用户下单,发送消息给下游系统
     * @param user
     * @param num
     */
    public void makerOrder(String user,  int num){
        //1、查询库存是否有剩余
        //2、保存订单
        String orderId = UUID.randomUUID().toString();
        System.out.println("订单生产成功:" + orderId);
        //3、通过mq给下游系统发送消息
        String exchangeName = "direct_order_exchange";
        rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);
        rabbitTemplate.convertAndSend(exchangeName, "email", orderId);
        System.out.println("完成");
    }
}

(从代码中可以看到,direct_order_exchange交换机分别给绑定的路由key为sms和email的消息队列发送了消息)

4、写一个测试类,发送消息

import com.xpf.rabbitmqspringboot.service.DirectOrderService;
import com.xpf.rabbitmqspringboot.service.FanoutOrderService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class RabbitmqSpringbootApplicationTests {

    @Autowired
    private FanoutOrderService fanoutOrderService;

    @Autowired
    private DirectOrderService directOrderService;

    /**
     * Direct模式生产者发送消息
     */
    @Test
    public void setDirectOrderService(){
        directOrderService.makerOrder("用户2", 10);
    }
}

(先别启动测试类,因为交换机和队列的声明放在下面的消费者中。) 

 Ⅱ 消费者

1、新建一个springboot项目,其中pom.xml 和 application.properties和上述生产者文件相同,但是如果在一个电脑模拟同启动两个项目时,记得把application.properties中的端口换成不同的

2、使用springboot写一个配置文件 RabbitMqConfiguration.java

关于为啥在消费者中建配置文件而不是在生产者,请看rabbitmq使用springboot实现fanout模式_p&f°的博客-CSDN博客

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfiguration {

    //1、声明注册Direct模式交换机
    @Bean
    public DirectExchange DirectExchange(){
        return new DirectExchange("direct_order_exchange", true, false);
    }

    //2、声明队列 sms.Direct.queue、email.Direct.queue、duanxin.Direct.queue
    @Bean
    public Queue smsQueue(){
        return new Queue("sms.direct.queue", true);
    }

    @Bean
    public Queue emailQueue(){
        return new Queue("email.direct.queue", true);
    }

    @Bean
    public Queue duanxinQueue(){
        return new Queue("duanxin.direct.queue", true);
    }

    //3、完成绑定关系(队列绑定交换机)
    @Bean
    public Binding smsBinding(){
        return BindingBuilder.bind(smsQueue()).to(DirectExchange()).with("sms");
    }

    @Bean
    public Binding emailBinding(){
        return BindingBuilder.bind(emailQueue()).to(DirectExchange()).with("email");
    }

    @Bean
    public Binding duanxinBinding(){
        return BindingBuilder.bind(duanxinQueue()).to(DirectExchange()).with("duanxin");
    }
}

3、写三个消费者分别监听路由key为sms、email、duanxin的消息队列

(这里举例两个 SmsDirectConsumer.java 和 EmailDirectConsumer.java)

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Author xpf
 * @Date 2023/7/9 1:27
 * @Version 1.0
 */
@Component
@RabbitListener(queues = "sms.direct.queue")
public class SmsDirectConsumer {

    @RabbitHandler
    public void receiveMessage(String message){
        System.out.println("接收到来自队列sms.direct.queue消息订单的message是:" + message);
    }
}
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Author xpf
 * @Date 2023/7/9 1:27
 * @Version 1.0
 */
@Component
@RabbitListener(queues = "email.direct.queue")
public class EmailDirectConsumer {

    @RabbitHandler
    public void receiveMessage(String message){
        System.out.println("接收到来自队列email.direct.queue消息订单的message是:" + message);
    }
}

三、测试

1、先启动消费者,因为本项目配置类在消费者

2、启动生产者测试类

结果发现路由key为sms、email的消息队列接收到了生产者发送的消息,而duanxin没有收到,结果符合预期文章来源地址https://www.toymoban.com/news/detail-607655.html

到了这里,关于rabbitmq使用springboot实现direct模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用spring boot拦截器实现青少年模式

    便用Spring Boot拦截器采累计在线时间采实现青少年模式的步骤,可以参考以卜步骤: 1.创建一个拦截器类,实现Handlerlnterceptor 接口。 2.在拦截器类中,定义一个变量来记录用户在线时间。 3.在preHandle方法中,记录用户的登录时间。 4.在afterCompletion方法中,计算用户在线时间,

    2023年04月08日
    浏览(33)
  • RabbitMQ入门案例之Direct模式

    RabbitMQ的Direct模式是一种可以根据指定路由key,Exchang将消息发送到具有该路由key下的Queue下进行存储。也就类似于将数据写进指定数据库表中。这个路由Key可以类比为SQL语句中的:where routeKey = … 官方文档地址:https://www.rabbitmq.com/getstarted.html RabbitMQ中的Direct模式是一种消息传

    2024年02月09日
    浏览(30)
  • [Spring boot] Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接

     🍳作者:天海奈奈 💭眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网  👉🏻点击开始刷题之旅 目录 什么是RabbitMQ   消息队列:接受并转发消息,类似于快递公司 消息队列的优点 消息队列的特性 RabbitMQ特点 RabbitMQ核

    2024年01月24日
    浏览(64)
  • Spring Boot 整合 RabbitMQ 实现延迟消息

    消息队列(Message Queuing,简写为 MQ)最初是为了解决金融行业的特定业务需求而产生的。慢慢的,MQ 被应用到了更多的领域,然而商业 MQ 高昂的价格让很多初创公司望而却步,于是 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)应运而生。 随着 AMQP 草案的发布,两个月

    2024年04月08日
    浏览(34)
  • Spring Boot项目使用RabbitMQ队列

    一、Rabbitmq的安装 RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,**即需要先安装部署Erlang环境再安装RabbitMQ环境。 erlang的安装在windows中直接点击安装即可。 安装完erlang后设置erlang的环境变量ERLANG_HOME。 然后安装rabbitmq。 安装成功后。 可以在浏览器中输入http:

    2024年02月02日
    浏览(29)
  • RabbitMQ详解(三):消息模式(fanout、direct、topic、work)

    参考官网:https://www.rabbitmq.com/getstarted.html 简单模式 Simple, 参考RabbitMQ详解(二):消息模式 Simple(简单)模式 简单模式是最简单的消息模式,它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息,消费者从队列中获取消息并消费。 发布订阅模式 fanout 同时向

    2024年02月10日
    浏览(36)
  • Spring Boot 中的 RabbitMQ 是什么,如何使用

    RabbitMQ 是一个开源的消息队列系统,它通过 AMQP(高级消息队列协议)来实现消息的传递。Spring Boot 是目前非常流行的 Java 开发框架,它提供了很多便利性的功能,其中就包括对 RabbitMQ 的支持。 在本文中,我们将介绍 RabbitMQ 的基本概念,以及如何在 Spring Boot 中使用 RabbitMQ。

    2024年02月12日
    浏览(39)
  • Spring Boot Testing: 使用springboot-test提供的测试框架来实现自动化测试

    作者:禅与计算机程序设计艺术 软件测试是在开发过程中不可缺少的一环。单元测试、集成测试、功能测试等都是为了保证系统的质量而进行的测试活动。单元测试主要验证各个模块(类、方法)在各种情况下是否正常工作;集成测试则是将不同模块组合起来看是否可以正常

    2024年02月07日
    浏览(36)
  • 【RabbitMQ】Spring整合RabbitMQ、Spring实现RabbitMQ五大工作模式(万字长文)

    目录 一、准备 1、创建maven项目​编辑 2、引入依赖 3、创建配置文件 1.RabbitMQ配置文件 2.生产者项目配置文件 3.消费者项目配置文件 二、生产者xml中文件创建队列 三、生产者xml文件中创建交换机以及绑定队列 1、创建交换机 2、绑定队列  四、消费者xml文件中创建队列消息监

    2024年01月21日
    浏览(31)
  • Spring Boot中RabbitMQ自动配置的介绍、原理和使用

    RabbitMQ是一种高性能的消息队列系统,它支持多种消息协议和丰富的功能,如消息路由、消息确认、消息重试、死信队列等。在Spring Boot中,我们可以通过自动配置的方式来使用RabbitMQ。本文将介绍Spring Boot中RabbitMQ自动配置的介绍、原理和使用方法。 在Spring Boot中,我们可以通

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包