1. 生产者

  2. 创建一个SpringBoot项目springboot-producer,作为RabbitMQ的生产者。

  3. 在pom文件中引入相关的依赖坐标

    <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>
    
  4. 在配置文件中加入RabbitMQ的相关配置项

    spring.rabbitmq.host=127.0.01
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    #虚拟机
    spring.rabbitmq.virtual-host=/test
    #连接超时时间
    spring.rabbitmq.connection-timeout=1000ms#producer
    #confirmslistener 消息是否投递成功
    spring.rabbitmq.publisher-confirms=true
    #没有队列接收消息时,返回一个状态
    spring.rabbitmq.publisher-returns=true
    #true当消息无法被正常送达的时候被返回给生产者,false丢弃
    spring.rabbitmq.template.mandatory=true
    
  5. 创建一个需要发送消息的实体类(必须实现Serializable接口)

    package com.kangswx.rabbitmq.springboot.domain;import java.io.Serializable;public class Employee implements Serializable {private String empno;private String name;private Integer age;public Employee() {}public Employee(String empno, String name, Integer age) {this.empno = empno;this.name = name;this.age = age;}public String getEmpno() {return empno;}public void setEmpno(String empno) {this.empno = empno;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
    }
    
  6. 创建一个发送消息的类,在类上面需要添加@Component注解。在没有启动消费者之前,如果没有创建对应的交换机,则会投递消息失败,此时需要手动创建交换机。

    import com.kangswx.rabbitmq.springboot.domain.Employee;
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.amqp.rabbit.support.CorrelationData;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;import java.util.Date;@Component
    public class MessageProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;//创建一个消息是否投递成功的监听对象confirmCallbackRabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {// 第一个参数, 消息的附加消息(自定义id),// 第二个参数, 消息是否被Broker接收,isAck(true接收,false拒收),// 第三个参数, 如果拒收,则返回拒收的原因@Overridepublic void confirm(CorrelationData correlationData, boolean isAck, String s) {System.out.println("======》correlationData: " + correlationData);System.out.println("======》isAck: " + isAck);if(!isAck){System.err.println("======》s: "+s);}}};//创建一个处理消息是否被队列接收的监听对象,如果没有队列接收发出的消息,则会自动调用returnedMessage方法,进行后续的处理RabbitTemplate.ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {// 第一个参数, 被退回的消息// 第二个参数, 错误编码// 第三个参数, 错误描述// 第四个参数, 交换机的名字// 第五个参数, 路由Key@Overridepublic void returnedMessage(Message message, int replyCode, String replyText, String exchangeName, String routingKey) {System.err.println("-----returnedMessage++code: " + replyCode +",  Text: " + replyText);System.err.println("-----returnedMessage++exchangeName: " + exchangeName +",  routingKey: " + routingKey);System.err.println("-----returnedMessage++message: " + message);}};public void sendMessage(Employee employee){//CorrelationData作用是作为消息的附加消息传递,通常我们用它来保存消息的自定义idCorrelationData correlationData = new CorrelationData(employee.getEmpno()+"-"+new Date().getTime());//设置消息是否投递成功的监听对象rabbitTemplate.setConfirmCallback(confirmCallback);//设置消息是否被队列成功接收的监听对象rabbitTemplate.setReturnCallback(returnCallback);//如果没有创建交换机的话,在投递消息的时候会投递失败//第一个参数,交换机的名称//第二个参数,路由key值//第三个参数,消息主题对应的类//第四个参数,消息的附件消息rabbitTemplate.convertAndSend("springboot-exchange", "hr.employee", employee, correlationData);}}
    
  7. 消费者

  8. 创建一个SpringBoot项目springboot-consumer作为消息队列的消费者

  9. 在pom文件中引入相关的依赖坐标

    <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>
    
  10. 在application.properties中添加RabbitMQ的相关配置项

    spring.rabbitmq.host=127.0.01
    spring.rabbitmq.port=5672
    spring.rabbitmq.username=guest
    spring.rabbitmq.password=guest
    #虚拟机
    spring.rabbitmq.virtual-host=/test
    #连接超时时间
    spring.rabbitmq.connection-timeout=1000ms#consumer
    #简单配置,手动的
    spring.rabbitmq.listener.simple.acknowledge-mode=manual
    #最小的消费者数量
    spring.rabbitmq.listener.simple.concurrency=1
    #最大的消费者数量
    spring.rabbitmq.listener.simple.max-concurrency=5
    
  11. 创建一个需要发送消息的实体类(该类的包名和类名必须与生产者一致 且 必须实现Serializable接口)

    import java.io.Serializable;public class Employee implements Serializable {private String empno;private String name;private Integer age;public Employee() {}public Employee(String empno, String name, Integer age) {this.empno = empno;this.name = name;this.age = age;}public String getEmpno() {return empno;}public void setEmpno(String empno) {this.empno = empno;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
    }
    
  12. 创建一个发送消息的类,在类上面需要添加@Component注解。在消费者中主要通过注解的方式完成相关的功能实现。当队列或交换机不存在的时候,会自动创建相关的队列或交换机,并进行绑定。消费者会一直处于等待状态,当有新的消息进来的时候,就会自动触发消费者的相关方法来处理消息。

    package com.kangswx.rabbitmq.springboot;import com.kangswx.rabbitmq.springboot.domain.Employee;
    import com.rabbitmq.client.Channel;
    import org.springframework.amqp.rabbit.annotation.*;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.amqp.support.AmqpHeaders;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.messaging.handler.annotation.Headers;
    import org.springframework.messaging.handler.annotation.Payload;
    import org.springframework.stereotype.Component;import java.io.IOException;
    import java.util.Map;@Component
    public class MessageConsumer {@Autowiredprivate RabbitTemplate rabbitTemplate;/*** 用于接收消息的方法* RabbitListener用于声明定义消息接收的队列与exchange绑定的信息,使消费者一直处于等待状态* 在SpringBoot中消费者这端使用注解获取消息*/@RabbitListener(bindings = @QueueBinding(//队列的信息,当队列不存在的时候,会自动创建一个队列,并绑定下面的交换机value = @Queue(value = "springboot-queue", durable = "true"),//交换机的信息exchange = @Exchange(value = "springboot-exchange", durable = "true", type = "topic"),//路由规则key = "#"))/*** RabbitHandler注解,通知SpringBoot该方法用于接收消息,这个方法运行后将处于等待状态,* 有新的消息进来就会自动触发该方法处理消息**  @param employee  Payload将接收的消息反序列化后注入到Employee对象*  @param channel   用于接收消息后进行Ack处理*  @param headers   headers获取辅助描述信息*/@RabbitHandlerpublic void handleMessage(@Payload Employee employee, Channel channel,@Headers Map<String, Object> headers){System.out.println("=====================");System.out.println("empno: "+employee.getEmpno() + ", name:" + employee.getName() + ", age:" + employee.getAge());long tag = (long) headers.get(AmqpHeaders.DELIVERY_TAG);try {//第一个参数,tag//第二个参数,是否批量接收channel.basicAck(tag, false);} catch (IOException e) {e.printStackTrace();}System.out.println("=====================");}
    }
    
  13. 生产者代码见 SpringBoot整合RabbitMQ生产者代码

  14. 消费者代码见 SpringBoot整合RabbitMQ消费者代码

SpringBoot整合RabbitMQ(包含生产者和消费者)相关推荐

  1. Spring整合RabbitMQ(包含生产者和消费者)

    生产者 创建一个MAVEN项目spring-exchange-producer作为消息队列的生产者 导入相关的依赖坐标 <dependencies><!-- https://mvnr ...

  2. Springboot整合RabbitMQ,包含direct,topic,fanout三种模式的整合

    一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...

  3. RabbitMQ 进阶 -- SpringBoot 集成 RabbitMQ实现生产者与消费者模式

  4. RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ

    RabbitMQ [黑马程序员RabbitMQ全套教程,rabbitmq消息中间件到实战] 文章目录 RabbitMQ 第一天 基础 6 SpringBoot 整合RabbitMQ 6.1 Sprin ...

  5. RabbitMq(九) SpringBoot整合RabbitMQ消费者示例代码

    概述 在上一篇我们介绍了SpringBoot整合RabbitMQ生产者代码,本章我们介绍SpringBoot整合RabbitMQ,实现消费者工程的代码实现.与生产者集成相比,集成消费者不需要进行添加配 ...

  6. RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现

    在本章中我们将创建RabbitMQ的生产者工程,并实现生产者端代码实现. springboot整合RabbitMQ生产者工程步骤如下: 创建maven工程 引入springboot及RabbitMQ依 ...

  7. RabbitMQ,RabbitMQ 的工作模式,Spring 整合 RabbitMQ,Springboot 整合RabbitMQ

    什么是RabbitMQ 1.1 MQ概述 MQ全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器.多用于分布式系统之间进行通信. ⚫ MQ,消息队列,存储消息的中间件 ⚫ ...

  8. 腻害,高人都是这样玩SpringBoot整合RabbitMQ

    一.认识 RabbitMQ RabbitMQ 简介以 AMQP 协议: (1)RabbitMQ 是开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ 底层是用了 ...

  9. SpringBoot 整合RabbitMq

    SpringBoot 整合RabbitMq (黑马讲义) SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便. SpringA ...

最新文章

  1. 在网络中同时使用kfold和使用Dropout(基于Iris数据集)
  2. 网络编程--sockaddr 与 sockaddr_in
  3. VDI序曲十五 配置 RemoteFX 以获得最佳体验
  4. 你真的了解Maven pom.xml 的配置吗?【详解maven pom】
  5. matlab 取43阶上部分,求教关于matlab四阶累积量函数里变量的意义。
  6. 从xml中返回的对象,和new 返回的对象时不同的。
  7. 【数据结构与算法】数组动态分配方式的思考
  8. 5月5日——更改手机状态栏的背景颜色
  9. Python 变量 字符串 运算
  10. RedHat停止维护CentOS!CentOS 创建者发起新项目,刚上线空白项目Star数已破两千
  11. 计算机个人职业生涯规划
  12. 海思麒麟要敢于叫板高通骁龙
  13. Word生成目录后,二级,三级目录页码处与一级目录不齐
  14. linux+tar怎样解压zip文件内容,linux tar压缩解压文件
  15. 数学分析对计算机有帮助吗,计算机辅助数学分析教学的好处
  16. AutoCAD Civil 3D创建点文件描述码(点特征码)集控制展点样式与特性
  17. 我的世界java播放背景音乐_我的世界BOSS音乐mod
  18. 程序员们的那些神表情,有木有击中你^_^
  19. EXCEL排产太麻烦?现在都用APS图形化排产啦
  20. 如何应对面试中的常见问题?

热门文章

  1. 华为EC6110-T_华为EC6110-M优盘刷机教程_当贝桌面纯净版
  2. 国信\教学课程\04.如何用EL开发交易APP
  3. (附源码)php沿河农产品特卖网站的设计与实现 毕业设计201524
  4. 【人工智能与深度学习】自我监督学习 - ClusterFit 和 PIRL
  5. React.lazy与Suspence实现延迟加载
  6. (四)本地镜像发布到阿里云将阿里云上的镜像下载到本地
  7. 企业纳税信用等级被评为D级有哪些惩戒措施?
  8. c语言开发ssl,SSL编程简介
  9. vue移动端日历组件
  10. 一个STM32F103+JQ8400+OLED的MP3方案