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官网:

汗 。写的太水了见谅。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐