RabbitMQ 是一个消息中间件,以异步的方式处理消息,实现了与业务之间的解耦,同时还有消息分发,消息缓存等功能。

RabbitMQ使用的是AMQP协议,全名是提供统一消息服务的应用层标准高级消息队列协议。默认启动端口 5672。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

在RabbitMQ中主要的概念有:交换机,队列,绑定,路由键等

Springboot整合RabbitMQ【前提已安装RabbitMQ】

1、添加依赖

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

2、配置application.yml

rabbitmq:
host: 192.168.59.131
port: 5672
username: admin
password: admin
virtual-host: /admin

3、创建交换机、路由键、绑定

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RobbitMQConfiguration {

    //交换机
    public static final String FANOUT_NAME = "goods_fanoutExchange";

    /**
     * 声明队列1
     */
    @Bean
    public Queue getQueue1(){
        return new Queue("goods_queue1");
    }

    /**
     * 声明队列2
     */
    @Bean
    public Queue getQueue2(){
        return new Queue("goods_queue2");
    }

    /**
     * 声明交换机
     */
    @Bean
    public FanoutExchange getFanoutExchange(){
        return new FanoutExchange(FANOUT_NAME);
    }

    /**
     * 将队列绑定到交换机上
     */
    @Bean
    public Binding getBinding1(){
        return BindingBuilder.bind(getQueue1()).to(getFanoutExchange());
    }

    @Bean
    public Binding getBinding2(){
        return BindingBuilder.bind(getQueue2()).to(getFanoutExchange());
    }
}

 

4、新增商品后,将商品信息添加到RabbitMQ中

import com.alibaba.dubbo.config.annotation.Service;
import com.qf.dao.GoodsMapper;
import com.qf.entity.Goods;
import com.qf.service.IGoodsService;
import com.qf.shop_service_goods.RobbitMQConfiguration; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; @Service public class GoodsServiceimpl implements IGoodsService { @Autowired private GoodsMapper goodsMapper; @Autowired private RabbitTemplate rabbitTemplate; @Override public int insert(Goods goods) { //添加商品 int result = goodsMapper.insert(goods); //添加商品的信息放到RobbitMQ中 rabbitTemplate.convertAndSend(RobbitMQConfiguration.FANOUT_NAME,"",goods); return result; } }

 

5、监听RabbitMQ消息1

import com.qf.entity.Goods;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class RabbitMQListener { @Autowired private SolrClient solrClient; //监听指定的队列 @RabbitListener(queues = "goods_queue1") public void Msg(Goods goods){ //接收MQ消息 System.out.println("搜索服务接收到MQ消息: "+goods); } }

6、监听RabbitMQ消息2

import com.qf.entity.Goods;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class RabbitMQListener { @RabbitListener(queues = "goods_queue2") public void Msg(Goods goods){ System.out.println("页面静态化工程接收到的MQ消息: "+goods); } }

7、Goods实体类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods implements Serializable {
    @TableId(type = IdType.AUTO)  //主键自动回填
    private int id;
    private String gname;
    private BigDecimal gprice;
    private int gsave;
    private String ginfo;
    private String gimage;
    private int status;
    private Date createtime = new Date();
    private int tid;
}

 

SpringBoot整合RabbitMQ 随笔 第1张

 

SpringBoot整合RabbitMQ 随笔 第2张

 

 ================ linux环境上RabbitMQ的安装===============================

1、安装Rabbitmq的语言环境 - erlang

      rpm -ivh erlang-20.1.7-1.el6.x86_64.rpm   2、安装Rabbitmq       rpm -ivh rabbitmq-server-3.4.1-1.noarch.rpm   3、启动/停止rabbitmq的服务       service rabbitmq-server start/stop/restart   4、拷贝并且修改配置文件         cd /usr/share/doc/rabbitmq-server-3.4.1         cp rabbitmq.config.example /etc/rabbitmq/rabbitmq.config           修改配置文件:         vim /etc/rabbitmq/rabbitmq.config SpringBoot整合RabbitMQ 随笔 第3张 注意:重启rabbitmq的服务   开启后台管理页面: cd /usr/share/doc/rabbitmq-server-3.4.1 rabbitmq-plugins enable rabbitmq_management   5、开启两个端口       5672:是rabbitmq的操作端口      15672:是rabbitmq后台管理工具的端口   6、验证:  xx.xx.xx.xx:15672 SpringBoot整合RabbitMQ 随笔 第4张

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄