RabbitMQ与SpringBoot整合

前文总结了Dubbo与SpringBoot的整合(https://www.cnblogs.com/cott/p/12373043.html),本文基于这套框架,引入RabbitMQ消息队列。

1.在linux环境使用docker安装RabbitMQ

//拉取镜像docker pull rabbitmq:management
//启动镜像
docker run -di --name myrabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

安装成功后登陆控制台

RabbitMQ与SpringBoot整合

2.生产者

pom.xml中引入RabbitMQ依赖

<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-amqpartifactId>
  <version>1.3.5.RELEASEversion>
dependency>

application.yml

配置RabbitMQ服务端连接,和交换机名称

spring:
  rabbitmq:
    port: 5672
    username: admin
    password: admin
    host: 192.168.200.128
    virtual-host: /

order:
  fanout:
    exchange: order.fanout.exchange

Producer.java

生产者向MQ发送消息

package com.cott.gmail.bootuserserviceprovider.mq;

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

import java.util.Date;
import java.util.UUID;

@Component
public class Producer {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Value("${order.fanout.exchange}")
    private String exchangeName;

    public void sendMsg() {
        String orderId = UUID.randomUUID().toString();
        String message = "你的订单信息是:" + orderId + ",日期是:" + new Date();
        rabbitTemplate.convertAndSend(exchangeName, message);
    }
}

UserServiceImpl.java

在用户接口的实现类中,调用生产者的方法

package com.cott.gmail.bootuserserviceprovider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.bootuserserviceprovider.mq.Producer;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;

@Service
@Component
public class UserServiceImpl implements UserService {

    @Autowired
    Producer producer;

    @Override
    public List getAddress(String uesrId) {
        producer.sendMsg();
        UserAddress userAddress1 = new UserAddress();
        userAddress1.setId(1);
        userAddress1.setUserAddress("1");
        userAddress1.setUserId("1");
        UserAddress userAddress2 = new UserAddress();
        userAddress2.setId(2);
        userAddress2.setUserAddress("2");
        userAddress2.setUserId("2");

        return Arrays.asList(userAddress1, userAddress2);
    }
}

3.消费者

pom.xml中引入RabbitMQ依赖

<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-amqpartifactId>
  <version>1.3.5.RELEASEversion>
dependency>

application.yml

配置RabbitMQ服务端信息,和交换机以及队列名称

spring:
  rabbitmq:
    port: 5672
    username: admin
    password: admin
    host: 192.168.200.128
    virtual-host: /

order:
  fanout:
    exchange: order.fanout.exchange
    queue: order.fanout.queue

Consumer.java

消费者

@RabbitListener注解,绑定队列,交换机,以及选择交换模式FANOUT

@RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型

package com.cott.gmail.bootorderserviceconsumer.service.impl;

import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${order.fanout.queue}", autoDelete = "true"), exchange =
@Exchange(value = "${order.fanout.exchange}", type = ExchangeTypes.FANOUT)))
public class Consumer {

    @RabbitHandler
    public void processMessage(String msg) {
        System.out.format("Receiving Message: -----[%s]----- \n.", msg);
    }
}

OrderServiceImpl.java

消费者中有调用生产者getAddress()的方法,生产者向MQ中发送一条消息,同时消费者监听MQ,消费消息。

package com.cott.gmail.bootorderserviceconsumer.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.cott.gmail.bean.UserAddress;
import com.cott.gmail.service.OrderService;
import com.cott.gmail.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class OrderServiceImpl implements OrderService {

    @Reference
    UserService userService;

    @Override
    public List initOrder(String id) {
        System.out.println("id= " + id);
        List list = userService.getAddress("1");
        for (UserAddress user : list
        ) {
            System.out.println(user.getUserAddress());
        }
        return list;
    }
}

4.验证

先后启动生产者和消费者,在浏览器发起请求

RabbitMQ与SpringBoot整合

消费者控制台输出

RabbitMQ与SpringBoot整合

同时在RabbitMQ控制台查看监控日志

RabbitMQ与SpringBoot整合

Original: https://www.cnblogs.com/cott/p/12402423.html
Author: Cott
Title: RabbitMQ与SpringBoot整合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714166/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • GitHub学生认证一次通过!【不用教育邮箱】

    谈一下我在GitHub学生认证的经过 第一次不懂,在电脑上开着vpn软件访问申请链接:https://education.github.com/pack/join,然后用中文填写学…

    技术杂谈 2023年6月21日
    0178
  • Docker安装Mysql

    安装 权威的都在官方: https://registry.hub.docker.com/ 先看看官方文档1、搜索mysql镜像2、找到对应镜像3、根据版本复制对应版本镜像拉取命令4…

    技术杂谈 2023年7月24日
    081
  • day4

    707.设计链表完整的设置链表的题目。插入可以先写,写完用在插表头和表位 if 0 <= index < self._count: # 计数-1 self._count…

    技术杂谈 2023年7月10日
    057
  • 继承

    public class 子类名 extends 父类名 { } ​ 注意事项:Java 不支持多继承 可以多层继承 (一个类不可以直接有多个父类,可以有父类的父类) ​ 让类3与…

    技术杂谈 2023年6月21日
    0112
  • 你真的了解word-wrap和word-break的区别吗?

    这两个东西是什么,我相信至今还有很多人搞不清,只会死记硬背的写一个word-wrap:break-word;word-break:break-all;这样的东西来强制断句,又或者是…

    技术杂谈 2023年5月31日
    0103
  • 关于程序员成长的一些思考

    任何一名技术大神都是从小菜鸟开始的,这应该无一例外。当然,有的人成长的快,有的人成长得慢,有的人坚持下来,有的人半途而废。如果我们在成长的过程中能掌握一些方法,也许能少走一些弯路。…

    技术杂谈 2023年7月11日
    0104
  • PyQt5 qss样式

    ################################ PyQt5中文网 – PyQt5全套视频教程 # https://www.PyQt5.cn/ # 主讲: 村长 #…

    技术杂谈 2023年5月31日
    084
  • 最小化一维曼哈顿距离的简单证明

    对于在数轴上的 (n) 个点,要集合所有点于同一位置,使得移动的曼哈顿距离之和最小,那么应该选取哪个点呢? 设有 (n) 个点, (i) 点的位置为 (x_i) ,且有 (x_i …

    技术杂谈 2023年7月25日
    0210
  • 【本科生科研入门】大学生如何撰写科研项目申报书和答辩PPT

    从我的经历来说,大学生主要能够参加的科研项目分为: 项目类别 国级大学生创新创业训练计划,简称:国创(也有部分地区部分高校称之为大创),以下简称国创。它主要分为创新训练项目和创业训…

    技术杂谈 2023年7月24日
    0117
  • KMP算法学习记录

    Foreword: 初学KMP匹配算法,不得其门,总感觉自己想,想不出来,看书上文字解释晦涩难懂。不能准确的捕捉算法设计时候的灵光和思路 。于是自己试着完成了一遍,现将过程记录下来…

    技术杂谈 2023年6月21日
    0110
  • Devops工程师需要具备的10项技能

    在这里,我们将讨论Devops工程师需要具备的10项技能,以享受成功的职业生涯。 正如下面所讨论的,DevOps是开发和运营的结合。因此,DevOps工作需要出色的沟通能力。此外,…

    技术杂谈 2023年5月31日
    077
  • [转帖][转]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月30日
    0109
  • 在线网盘ZFile 安装

    目录结构 启动&停止&&重启 ~/zfile/bin/start.sh ~/zfile/bin/stop.sh ~/zfile/bin/restart.sh…

    技术杂谈 2023年5月31日
    0115
  • 实际项目中尝试K8S蓝绿部署

    我们有一个前端使用 Angular 的项目,采用 Kubenetes 默认部署方式 rolling updates 发布时,在更新 pod 的阶段有时会出现灰屏的现象,问题源于新旧…

    技术杂谈 2023年5月31日
    0117
  • CentOS 7创建自定义KVM模板(现有KVM迁移到另外一台机)

    说明:创建KVM模板有个好处,不用每次都运行命令创建,并且可以为迁移做准备。 一、创建KVM模板 1、下载iso(省略) 2、创建磁盘 3、编写XML 提示:上面的模板自行根据需要…

    技术杂谈 2023年5月30日
    096
  • 使用 async-await 实现一个请求失败自动重新请求的函数

    在项目开发中, 需要拉取 GA 数据放到自己的数据库中, 用于做更定制化的数据分析和图表等. 但是因为数据较多, GA 一次性只能取得 10w 条数据, 所以需要多次请求才能获取到…

    技术杂谈 2023年6月21日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球