当前位置: 首页 > news >正文

Rabbit与springboot整合-1

               目录

1、整体结构

2、pom引入

3、配置文件

4、代码

公共类

 controller类

JSON转换类

 监听-接收发送消息类


1、整体结构

2、pom引入

<!--rabbitmq-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

3、配置文件

4、代码

公共类

 controller类

import com.rabbitmqprovider.commons.CommonUtils;
import com.rabbitmqprovider.vo.User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class RabbitMQController {Logger LOG = LoggerFactory.getLogger(RabbitMQController.class);@AutowiredAmqpAdmin amqpAdmin;/*** 交换机创建*/@GetMapping("/createExchange")public void createExchange(){// 第一个参数为交换机名字,第二个参数为是否持久化,第三个参数为不使用交换机时删除DirectExchange directExchange = new DirectExchange(CommonUtils.dirExchange,true,false);amqpAdmin.declareExchange(directExchange);System.out.println("交换机创建成功");}/*** 绑定队列*/@GetMapping("/createQueue")public void createQueue() {/*** 第一个参数为队列名字,* 第二个参数为是否持久化,* 第三个参数为是否排他(true:一个连接只能有一个队列,false:一个连接可以有多个(推荐))* 第四个参数为不使用队列时自动删除*/Queue queue = new Queue(CommonUtils.queueStr,true,false,false);amqpAdmin.declareQueue(queue);System.out.println("队列创建成功");}/*** 绑定交换机和队列*/@GetMapping("/createBinding")public void createBinding() {/*** 第一个参数为目的地,就是交换机或者队列的名字* 第二个参数为目的地类型,交换机还是队列* 第三个参数为交换机,QUEUE-队列  EXCHANGE-交换机* 第四个参数为路由键,匹配的名称*/Binding binding = new Binding(CommonUtils.queueStr,Binding.DestinationType.QUEUE,CommonUtils.dirExchange,CommonUtils.routingKey,null);amqpAdmin.declareBinding(binding);System.out.println("绑定成功");}@AutowiredRabbitTemplate rabbitTemplate;/*** 发送消息* 结果:"这是一条消息"*/@GetMapping("/sendMessageTest")public String sendMessageTest(){// 消息类型为object 发送对象也是可以的String msg = "这是一条消息";// 第一个参数为发送消息到那个交换机上,第二个是发送的路由键(交换机进行需要符合绑定的队列),第三个参数为发送的消息rabbitTemplate.convertAndSend(CommonUtils.dirExchange,CommonUtils.routingKey,msg);System.out.println("消息发送成功");return "发送成功;发送内容为:"+msg;}/*** 发送消息* 结果:{"name":"张三、李四","age":22}*/@GetMapping("/sendMessageUserTest")public void sendMessageUserTest(){User user = new User();user.setAge(22);user.setName("张三、李四");// 第一个参数为发送消息到那个交换机上,第二个是发送的路由键(交换机进行需要符合绑定的队列),第三个参数为发送的消息rabbitTemplate.convertAndSend(CommonUtils.dirExchange,CommonUtils.routingKey,user);System.out.println("消息发送成功");}}

JSON转换类

 监听-接收发送消息类

@Slf4j
@Service
public class TestService {// queues是监听的队列名字,可以是多个 ,CommonUtils.queueStrTest//接收全部的消息@RabbitListener(queues = {CommonUtils.queueStr})public void reciveMessage(Object message){System.out.println("接收的信息->" + message);}

返回结果:

接收的信息->(
Body:'"这是一条消息"' MessageProperties [headers={__TypeId__=java.lang.String}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=helloword-java, receivedRoutingKey=hello.java, deliveryTag=1, consumerTag=amq.ctag-GWK_TTPoabVGD65ZtH81jg, consumerQueue=hello-java-queue])

//使用 @Payload注解  拿到  body的内容

@RabbitListener(queues = {CommonUtils.queueStr})
public void reciveMessage(@Payload String body, Channel channel,@Headers Map<String,Object> headers){System.out.println("接收的信息" + body);
}

返回结果:

接收的信息->这是一条消息

/*** 实体类接收* 接收的信息->张三、李四==22* @param body* @param channel*/
@RabbitListener(queues = {CommonUtils.queueStr})
public void reciveMessage(@Payload User body, Channel channel){System.out.println("接收的信息->" + body.getName()+"=="+body.getAge());
}

}

实体类

 

结果:

消息发送成功:这是一条消息


接收的信息(Body:'"这是一条消息"' MessageProperties [headers={__TypeId__=java.lang.String}, contentType=application/json, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, redelivered=false, receivedExchange=helloword-java, receivedRoutingKey=hello.java, deliveryTag=3, consumerTag=amq.ctag-cQAY1sFSowAWw2RH8IWuzA, consumerQueue=hello-java-queue])
 

 提醒:刚才再运行项目,发送消息时,总是提示拒绝连接,研究了好长时间发现是端口错误了,我映射的端口是 5673->5672;

http://www.lryc.cn/news/61534.html

相关文章:

  • 项目沟通管理5大技巧 第4个很重要
  • vector(入门知识点)
  • 成人高考专业怎么选?看这三点
  • 设计模式:UML中的类图(6种关系)
  • 00后卷王的自述,我真有同事口中说的那么卷?
  • VS2022配置OpenGL+GLAD
  • javascript for循环的定义
  • 【安全与风险】安全研究的新课题
  • 4核8G云服务器腾讯云CVM S5和轻量应用服务器性能差异?
  • 【对比】文心一言对飚ChatGPT实操对比体验
  • C++:Article:链接器(二):符号决议
  • 期权价格上下限与期权平价关系
  • QT中TCP的学习
  • 编译选项与常用环境变量
  • 【SpringBoot2】SpringBoot开发实用篇
  • 接口自动化测试框架搭建全部过程
  • SQL学习(十)--DML_多表查询(针对数据表记录的join查询、子查询的操作)
  • Docker容器部署
  • 26岁转行网络安全,成功上岸安全开发!
  • 涨点技巧: 谷歌强势推出优化器Lion,引入到Yolov8,内存更小、效率更高,秒杀Adam(W)
  • 5年测试经验,自动化都不会?月薪11K都难拿....
  • 低代码平台名声臭,用起来却真香——60%开发者不敢承认
  • PHP 的代码简洁之道(Clean Code PHP)
  • delphi在两个窗口间用消息通讯
  • 如何高效提高倾斜摄影三维模型顶层合并的技术方法分析
  • 【科普】PCB为什么常用50Ω阻抗?6大原因
  • Linux嵌入式uboot使用tftp网络启动加载zImage、设备树
  • 使用Serv-U搭建FTP服务器并公网访问【内网穿透】
  • 后端大厂面试总结大全六
  • 2023五一数学建模A题B题C题思路模型代码