Springboot中使用RabbitMq

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

代码地址: https://gitee.com/Aes_yt/middleware-demo/tree/master/rabbitmq

安装RabbitMq

1. docker拉取镜像
docker pull rabbitmq:3.9.29-management
2. 创建rabbitmq容器
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9.29-management
3. 访问地址

http://{ip地址}:15672/,可以看到RabbitMq的管理后台界面。账号密码默认 guest

消息生产和消费

rabbitmq-producer
  1. 新建module,引入依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
  2. yaml配置地址

    spring:
      rabbitmq:
        host: 192.168.67.131
        port: 5672
        username: guest
        password: guest
        virtual-host: /
    
  3. 配置交换机

    @Configuration
    public class RabbitMqConfig {
        /*定义交换机名称*/
        public static final String USER_INFO_EXCHANGE_NAME = "user_info_exchange";
    
        @Bean
        public Exchange userInfoExchange() {
            return ExchangeBuilder.topicExchange(USER_INFO_EXCHANGE_NAME).durable(true).build();
        }
    }
    
  4. 发送消息

        @Test
        public void sendMessage() {
    
            String registerMsg = "user register..." + new Date();
            // 1. 发送一条注册消息
            rabbitTemplate.convertAndSend(RabbitMqConfig.USER_INFO_EXCHANGE_NAME,
                    "user.register.user1", registerMsg, msg -> {
                        msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                        return msg;
                    });
            log.info("消息发送完成:{}", registerMsg);
    
    
            String loginMsg = "user login..." + new Date();
            // 2. 发送一条登录消息
            rabbitTemplate.convertAndSend(RabbitMqConfig.USER_INFO_EXCHANGE_NAME,
                    "user.login.user1", loginMsg, msg -> {
                        msg.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);
                        return msg;
                    });
            log.info("消息发送完成:{}", loginMsg);
    
        }
    
rabbitmq-consumer
  1. 新建module,引入依赖

    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
    
  2. yaml配置地址

    spring:
      rabbitmq:
        host: 192.168.67.131
        port: 5672
        username: guest
        password: guest
        virtual-host: /
    
  3. 配置队列绑定关系

    @Configuration
    public class RabbitMqConfig {
        @Value("${spring.rabbitmq.host}")
        private String host;
        @Value("${spring.rabbitmq.port}")
        private Integer port;
        @Value("${spring.rabbitmq.username}")
        private String username;
        @Value("${spring.rabbitmq.password}")
        private String password;
    
        /*定义交换机名称*/
        public static final String USER_INFO_EXCHANGE_NAME = "user_info_exchange";
        /*定义队列名称*/
        public static final String USER_REGISTER_QUEUE_NAME = "user_register_queue";
        public static final String USER_LOGIN_QUEUE_NAME = "user_login_queue";
    
        public static final String USER_REGISTER_ROUTING_KEY = "user.register.#";
        public static final String USER_LOGIN_ROUTING_KEY = "user.login.#";
    
        @Bean
        public Exchange userInfoExchange() {
            return ExchangeBuilder.topicExchange(USER_INFO_EXCHANGE_NAME).durable(true).build();
        }
    
        @Bean
        public Queue userRegisterQueue() {
            return QueueBuilder.durable(USER_REGISTER_QUEUE_NAME).build();
        }
    
        @Bean
        public Queue userLoginQueue() {
            return QueueBuilder.durable(USER_LOGIN_QUEUE_NAME).build();
        }
    
        @Bean
        public Binding userRegisterBinding() {
            return BindingBuilder.bind(userRegisterQueue()).to(userInfoExchange()).with(USER_REGISTER_ROUTING_KEY).noargs();
        }
    
        @Bean
        public Binding userLoginBinding() {
            return BindingBuilder.bind(userLoginQueue()).to(userInfoExchange()).with(USER_LOGIN_ROUTING_KEY).noargs();
        }
    
    }
    
  4. 监听器

    @Component
    @Slf4j
    public class UserInfoListener {
    
        @RabbitListener(queues = RabbitMqConfig.USER_REGISTER_QUEUE_NAME)
        public void userRegister(String msg){
            log.info(msg);
        }
    
        @RabbitListener(queues = RabbitMqConfig.USER_LOGIN_QUEUE_NAME)
        public void userLogin(String msg){
            log.info(msg);
        }
    }
    
  5. 结果

    启动producer项目和consumer项目,producer发送消息,consumer接收到消息:

    producer:

    2023-07-08 10:26:10.660  INFO 7432 --- [main] com.yt.rabbit.RabbitProducerTest: 消息发送完成:user register...Sat Jul 08 10:26:10 CST 2023
    2023-07-08 10:26:10.663  INFO 7432 --- [main] com.yt.rabbit.RabbitProducerTest: 消息发送完成:user login...Sat Jul 08 10:26:10 CST 2023
    

    consumer:

    2023-07-08 10:26:10.661  INFO 25108 --- [ntContainer#1-1] c.yt.rabbitmq.listener.UserInfoListener  : user register...Sat Jul 08 10:26:10 CST 2023
    2023-07-08 10:26:10.665  INFO 25108 --- [ntContainer#0-1] c.yt.rabbitmq.listener.UserInfoListener  : user login...Sat Jul 08 10:26:10 CST 2023
    

交换器类型

交换器类型有四种,fanout,topic,direct,headers。
接下来在代码中创建三种交换器类型,对应的routingKey和queue绑定如表格所示。发送对应消息,看看是否能接收到 [Y/N]。headers类型不演示。

Exchange ExchangeType RoutingKey MessageKey Queue Receive
fanout_exchange fanout fanout.test.key1
fanout.#
xxx.yyy.zzz fanout_test_queue1
fanout_test_queue2
Y
Y
topic_exchange topic topic.test.#
topic.#
topic.*
topic.test.key1
topic_test_queue1
topic_test_queue2
topic_test_queue3
Y
Y
N
direct_exchange direct direct.test.key1
direct.test.#
direct.test.key3
direct.test.key1
direct.test.key2
direct.test.key3
direct_test_queue1
direct_test_queue2
direct_test_queue3 && direct_test_queue4
Y
N
Y && Y

direct 的Routingkey是全匹配,通配符不起作用,所以direct_test_queue2没有接收到消息。
topic 的通配符,*正好匹配一个词,#可以匹配一个或多个词,所以topic_test_queue3没有接收到消息。文章来源地址https://www.toymoban.com/news/detail-711641.html

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

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

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

相关文章

  • 多个springboot整合使用rabbitmq(使用注解的方式)

    先参考单个springboot使用rabbitmq和了解rabbitmq的五种模式 单个springboot整合rabbitmq_java-zh的博客-CSDN博客 1、先创建两个springboot项目, 一个做生产者,一个做消费者  2、导包(生产者和消费者对应的内容都是一样) 3、编写配置文件 这里的配置文件生产者和消费者都一样 这里以rab

    2024年02月11日
    浏览(30)
  • rabbitmq使用springboot实现direct模式

    类型:direct 特点:Direct模式是fanout模式上的一种叠加,增加了路由RoutingKey的模式。 Ⅰ 生产者  1、引入相应的pom文件 pom.xml 2、配置文件 application.properties 3、写一个生产者   DirectOrderService.java (从代码中可以看到,direct_order_exchange交换机分别给绑定的路由key为sms和email的消息

    2024年02月15日
    浏览(32)
  • 【RabbitMQ】| Lion带你 (超详细) 从0到1使用SpringBoot操作RabbitMQ

    Spring Boot操作RabbitMQ是一种非常有用的技术,它可以提高应用程序的性能、可靠性和可伸缩性,为开发人员提供更好的开发和维护体验。下面是它的一些优点: 提高应用程序的可靠性和稳定性。RabbitMQ作为一种基于消息传递的中间件,可以将消息传递给应用程序,从而避免了高

    2024年02月01日
    浏览(36)
  • 在SpringBoot中对RabbitMQ三种使用方式

            1.使用AmqpAdmin定制消息发送组件          2.消息发送者发送消息              创建实体类                                  发送消息                           如图所以,如果我们直接发送的话就会报这个错,有两种解决方法,第一种是比较常用的让实体

    2024年02月13日
    浏览(33)
  • Git 使用https克隆代码

    在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地。 这两种方式的主要区别在于: 使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账

    2024年02月13日
    浏览(64)
  • SpringBoot使用JKS或PKCS12证书实现https

    可以利用jdk自带的keytool工具来生成证书文件, 默认生成的是JKS证书 cmd命令如下: 执行如下命令,并按提示填写证书内容,最后会生成server.keystore文件 在springboot中配置这个JKS证书 需要在application.yml或application.properties配置文件里 配置server.ssl相关配置如下: keytool工具可以将刚

    2024年02月10日
    浏览(40)
  • springboot下使用rabbitMQ之开发配置方式(二)

    消息参数传递在开发中也是个坑,不论使用内置的 SimpleMessageConverter 还是 Jackson2JsonMessageConverter 均无法让Consumer接收动态参数 首先贴出具体代码以及测试用例: 消费者 生产者(测试用例) 执行测试用例,它居然抛错了: 看吧json字符串是无法序列化为Map😂 试试用dto来接收这

    2024年02月16日
    浏览(37)
  • RabbitMQ快速使用代码手册

    本篇博客的内容为RabbitMQ在开发过程中的快速上手使用,侧重于代码部分,几乎没有相关概念的介绍,相关概念请参考以下csdn博客,两篇都是我找的精华帖,供大家学习。本篇博客也持续更新~~~ 内容代码部分由于word转md格式有些问题,可以直接查看我的有道云笔记,链接:

    2024年02月09日
    浏览(38)
  • 微服务 02-rabbitmq在springboot中如何使用(上篇)

    目录 前言: 上文传送 - 安装rabbitmq传送门: - rabbitmq使用出现问题解决传送门: 1. rabbitmq的六大模式:  1.1 简单模式: (一对一) - 业务场景:  1.2 工作模式: (一对多) - 业务场景:  1.3 发布与订阅模式: (广播) 1.4 路由模式:   - 业务场景 1.5 主题模式: (路由升级版) - 业务场景 1.6 RPC异步

    2024年02月13日
    浏览(34)
  • 微服务: 03-rabbitmq在springboot中如何使用(下篇)

    目录 前言: 上文传送 4.六大模式实际操作(续) 4.4  路由模式:  --- 4.4.1 消费者配置类 --- 4.4.2 消费者代码 ---4.4.3 生产者代码 4.5  主题模式: (路由升级版) --- 4.5.1 消费者配置类 --- 4.5.2 消费者代码 --- 4.5.3 生产者代码 --- 4.5.4 测试效果 4.6  RPC异步调用模式(用的少)  --- 4.6.0 找了

    2024年02月12日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包