SpringBoot整合RabbitMQ

一、Ubuntu下安装RabbitMQ

1、安装erlang环境
apt install erlang
2、安装rabbitmq
apt install rabbitmq-server
3、添加用户,设置密码。并同时设置权限
rabbitmqctl add_user xiangyida 123456
rabbitmqctl set_user_tags xiangyida administrator
4、安装插件
rabbitmq-plugins enable rabbitmq_management

可在浏览器输入http://localhost:15672 登录后查看服务器情况
在这里插入图片描述

二、rabbitMQ基础

  • Message 消息。消息是不具名的,它由消息头消息体组成。消息体是不透明的,而消息头则由一系列可选
    属性组成,这些属性包括:routing-key(路由键)、priority(相对于其他消息的优先
    权)、delivery-mode(指出消息可能持久性存储)等。

  • Publisher 消息的生产者。也是一个向交换器发布消息的客户端应用程序。

  • Consumer 消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。

  • Exchange 交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

三种常用的交换器类型

  1. direct(发布与订阅 完全匹配)
  2. fanout(广播)
  3. topic(主题,规则匹配)
  • Binding
    绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息
    队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

  • Queue消息队列。用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一
    个消息可投入一个或多个队列。消息一直在队列里面,等待消费者链接到这个队列将其取
    走。

  • Routing-key路由键。RabbitMQ 决定消息该投递到哪个队列的规则。队列通过路由键绑定到交换器。
    消息发送到 MQ 服务器时,消息将拥有一个路由键,即便是空的,RabbitMQ 也会将其和绑定使用的路由键进
    行匹配。如果相匹配,消息将会投递到该队列。如果不匹配,消息将会进入黑洞。

  • Connection 链接。指 rabbit 服务器和服务建立的 TCP 链接。

  • Channel信道。

  • Virtual Host 虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证
    和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有
    自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时指定,
    RabbitMQ 默认的 vhost 是/

二、SpringBoot整合rabbitMQ

1、添加依赖
<!--rabbitmq-->
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-amqp</artifactId>
     </dependency>
2、配置连接信息
spring:
  # mq
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: xiangyida
    password: 123456
    listener:
      direct:
        retry:
          enabled: true
          max-attempts: 5
3、添加配置类
package xyh.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author XiangYida
 * @version 2/9/19 9:39 PM
 */
@Configuration
public class RabbitConfig {
    /**
     * 创建队列
     */
    @Bean
    public Queue createQueue1() {
        return new Queue(RabbitConfig.queue1);
    }
    @Bean
    public Queue createQueue2() {
        return new Queue(RabbitConfig.queue2);
    }
    //交换器
    public static final String exchange1 = "exchange1";

    //队列
    public static final String queue1 = "queue1";
    public static final String queue2 = "queue2";
    //路由键
    public static final String routingKey1 = "routingKey1";
    public static final String routingKey2 = "routingKey2";

    /**
     * 交换机类型
     *
     */
    @Bean
    public DirectExchange defaultExchange() {
        return new DirectExchange(exchange1);
    }

    /**
     *
     *  一个交换机可以绑定多个消息队列
     */
    @Bean
    public Binding binding() {
        return BindingBuilder.bind(createQueue1()).to(defaultExchange()).with(RabbitConfig.routingKey1);
    }
    @Bean
    public Binding bindingB(){
        return BindingBuilder.bind(createQueue2()).to(defaultExchange()).with(RabbitConfig.routingKey2);
    }
}
4、消息生产者
package xyh.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import xyh.config.RabbitConfig;
/**
 * @author XiangYida
 * @version 2/9/19 9:46 PM
 */
@Component
@Slf4j
public class Sender{
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMsg(String content) {
        rabbitTemplate.convertAndSend(RabbitConfig.exchange1, RabbitConfig.routingKey1, content);
    }
}
5、消息接收者
package xyh.rabbitmq;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import xyh.config.RabbitConfig;
/**
 * @author XiangYida
 * @version 2/9/19 9:49 PM
 */
@Component
@Slf4j
public class Receiver_1 {
    /**
     * 接收消息的方法,采用消息队列监听机制
     * @param msg
     */
    @RabbitListener(queues = RabbitConfig.queue1)
    public void process(String msg) throws InterruptedException {
        log.info("队列1接收到消息"+msg);
    }
}
6、测试
2019-02-25 20:15:15.593 [SimpleAsyncTaskExecutor-1] INFO  xyh.rabbitmq.Receiver_1 - 队列1接收到消息hello
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值