zoukankan      html  css  js  c++  java
  • SpringBoot整合RabbitMQ

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

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

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

    RabbitMQ的应用场景:https://www.cnblogs.com/wakey/p/12698798.html

    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
    注意:重启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
  • 相关阅读:
    WPF 获取本机所有字体拿到每个字符的宽度和高度
    WPF 自己封装 Skia 差量绘制控件
    WPF 漂亮的现代化控件 新 ModernWPF 界面库
    dotnet 在 UOS 国产系统上使用 MonoDevelop 创建 GTK 全平台带界面应用
    dotnet 在 UOS 国产系统上使用 MonoDevelop 进行拖控件开发 GTK 应用
    dotnet 在 UOS 国产系统上安装 MonoDevelop 开发工具
    通过java采集PC麦克风音频及播放wav音频文件
    nginx-http之ssl(九)
    nginx-http之proxy(八)
    nginx-http之upstream(七)
  • 原文地址:https://www.cnblogs.com/wakey/p/10701454.html
Copyright © 2011-2022 走看看