使用idea开发工具如何让SpringBoot框架(SpringCloud框架)整合RabbitMQ
1.创建Maven多模块,有两个子项目一个消息发送(rabbitmq-send) 一个接收消息(rabbitmq-receive)创建项目勾选 web ingratio/Messaging ->RabbitMQ首先创建父项目,选择Maven接着创建子模块儿消息发布者(rabbitmq-send),选择springboot项目创建项目勾选 web ingr...
1. 创建Maven多模块,有两个子项目一个消息发送(rabbitmq-send) 一个接收消息(rabbitmq-receive)
创建项目勾选 web ingratio/Messaging ->RabbitMQ
首先创建父项目,选择Maven
接着创建子模块儿消息发布者(rabbitmq-send),选择springboot项目
创建项目勾选 web ingratio/Messaging ->RabbitMQ
2. 在两个项目中的配置类中配置RabbitMQ
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8081
3.在send项目中配置消息队列类
.1 创建RabbitMQConfig类
.2 在类上添加注解@Configuration
.3 创建定义消息队列的方法,消息队列名称自定义
package com.jk.config;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration //表示此类为配置文件类
public class RabbitMQConfig {
@Bean
public Queue queueMessage(){
return new Queue("jk-mes"); //name是自定义的
}
}
.4 在发送消息的Controller类中注入
// 注入RabbitMQ操作模板
@Autowired
private AmqpTemplate amqpTemplate;
.5 发送消息,通过模板调用方法convertAndSend(队列名称, 消息)
amqpTemplate.convertAndSend("orderQueue1", jsonStr);
package com.jk.controller;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class OrderController {
// 注入RabbitMQ操作模板
@Autowired
private AmqpTemplate amqpTemplate;
/**
* 测试
* @return
*/
@GetMapping
@ResponseBody
public String sendMes(){
amqpTemplate.convertAndSend("jk-mes","订单消息发送成功!");
return "发送消息";
}
}
4.启动项目访问测试方法路径
访问成功了,我们再去官网看看队列是否生成了
如图,队列已经生成了。消息已经存了进去,接下来我们来读取数据。
5.创建接收消息项目(rabbitmq-receive)。所选服务与发送消息项目一致
6.同样在配置类配置
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
server:
port: 8082
7.创建controller
8. 在receive项目中只需要配置消息队列的监听,定义方法上
在接收消息的方法上定义此注解并指定消息队列名称
@RabbitListener(queues = "orderQueue1")
package com.jk.controller;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Controller;
@Controller
public class OrderController {
//在接收消息的方法上定义此注解并指定消息队列名称
@RabbitListener(queues = "jk-mes")
public void receiveMes(String mes){
System.out.println(mes);
}
}
9.启动接收消息项目(rabbitmq-receive),控制台打印了
官网状态已经改变了。这样就已经集成完毕了。可以演示一下如果有一个商品秒杀,100个人抢购的场景
首先在发送消息和接受消息的项目中建一个实体类
package com.jk.model;
import lombok.Data;
import java.util.Date;
@Data
public class Order {
private Integer orderId;
private String orderName;
private Double orderPrice; //BigDecimal
private Date createTime;
public Integer getOrderId() {
return orderId;
}
public void setOrderId(Integer orderId) {
this.orderId = orderId;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Double getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(Double orderPrice) {
this.orderPrice = orderPrice;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
在发送消息的配置类中创建新队列
@Bean
public Queue queueMessage2(){
return new Queue("1809a-order");
}
消息发送项目controller
/**
* 演示100人秒杀商品场景
* @return
*/
@GetMapping("sendOrder")
@ResponseBody
public String sendOrder(){
for (int i=1 ; i<100; i++){
Order order = new Order();
order.setOrderId(i);
order.setOrderName(i + "式火箭炮");
order.setOrderPrice(2000000.00);
order.setCreateTime(new Date());
String jsonstr = JSONObject.toJSONString(order);
amqpTemplate.convertAndSend("1809a-order", jsonstr);
}
return "发送消息";
}
消息接收项目controller
//在接收消息的方法上定义此注解并指定消息队列名称
@RabbitListener(queues = "1809a-order")
public void receiveOrder(String mes){
Order order = JSONObject.parseObject(mes, Order.class);
System.out.println(order.toString());
// 扣减库存 发短信
}
启动项目
可以看到控制台
RabbitMQ官网:
汗 。写的太水了见谅。
更多推荐
所有评论(0)