SpringBoot整合RabbitMQ
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; }
================ 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


更多精彩