springboot整合rabbitMQ
springboot引入了相关的依赖后,提供一个工具类 RabbitTemplate. 发送功能使用这个工具类可以发送消息。
引入依赖
引入rabbitMQ的依赖,web启动项,template
rabbitMQ的依赖: 启动类加载。读取配置文件:
springboot自动装配原理: 引用starter启动依赖时,把对应的自动装配类加载进去,该自动装配类可以读取application配置文件中内容。 DispatherServlet
<!--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>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.72</version>
</dependency>
创建子工程
第一:新建
第二:选择maven项目,剩下的就跟往常一样。
第三:建好的如下图:
相应的生产者和消费的配置
创建一个application.yml文件,每一个模块都要有这个配置,注意端口号不能重复。
server:
port: 8081
#rabbit的配置
spring:
rabbitmq:
host: 192.168.31.142
每一个模块都需要新建一个主启动类
@SpringBootApplication
public class PayApp {
public static void main(String[] args){
SpringApplication.run(PayApp.class,args);
}
}
生产者
该模式是以广播模式为例:
该生产者是以订单为例子:
// 序列化过程 将交换机的名称 路由key不填,
rabbitTemplate.convertAndSend(“ban129_exchange11”, “”, JSON.toJSONString(map))
假如用主题模式:
rabbitTemplate.convertAndSend(“ban129_exchange11”, “lazy.orange.rabbit”, JSON.toJSONString(map));
就相当于这就话:channel.basicPublish(“ban129_exchange_topic”,“lazy.orange.rabbit”,null,msg.getBytes());
@RestController
public class OrderController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("/order")
public String order() {
System.out.println("订单下单成功");
Map<Object, Object> map = new HashMap<>();
map.put("orderId", 1);
map.put("orderName", "张三");
map.put("orderPhone", "13923920139");
// 序列化过程
rabbitTemplate.convertAndSend("ban129_exchange11", "",JSON.toJSONString(map));
return "订单下单成功";
}
}
消费者01
该消费者01是以库存为例子:
表示监听rabbitmq,queues表示队列名称
@RabbitListener(queues = {“ban129_fanout22”})
@Component
public class StockController {
@RabbitListener(queues = {"ban129_fanout22"})
private void pay(String msg){
// 将json转换为map类型
Map map = JSON.parseObject(msg, Map.class);
System.out.println("支付端接收订单信息:"+map);
}
}
消费者02
该消费者02是以支付为例子:
表示监听rabbitmq,queues表示队列名称
@RabbitListener(queues = {“ban129_fanout11”})
@Component
public class PayController {
// 队列中存在消息则立即回调方法
@RabbitListener(queues = {"ban129_fanout11"})
private void pay(String msg){
// 将json转换为map类型
Map map = JSON.parseObject(msg, Map.class);
System.out.println("支付端接收订单信息:"+map);
}
}