SpringBoot整合RabbitMQ

1.什么是RabbitMQ
RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。
RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展
性、高可用性等方面表现不俗
RabbitMQ有三大模式
第一步:在你的pom.xml导入依赖

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

第二步:在application.yml添加配置文件(注意层次和空格)

spring:
	rabbitmq:
		host: 127.0.0.1

直接模式(Direct)
应用场景:我们需要将消息发给唯一一个节点时使用这种模式,这是最简单的一种形式。
任何发送到Direct Exchange的消息都会被转发到RouteKey中指定的Queue。

1.一般情况可以使用rabbitMQ自带的Exchange(交换器):”"(该Exchange的名字为空字符串,下
文称其为default Exchange)。

2.这种模式下不需要将Exchange进行任何绑定(binding)操作

3.消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。

4.如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。

发送者

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * @Description: 直接模式
     * @Param: [msg] ce 是你的队列名称
     * @return: void
     * @Author:
     * @Date: 2018/12/3
     */
    @Test
    public void sendMsg() {
        rabbitTemplate.convertAndSend("ce", "测试直接模式");  
    }

消费者

@Component
@RabbitListener(queues = "ce")  #你要监听的队列
public class Customer1 {

    @RabbitHandler
    public void getMsg(String msg) {
        System.out.println("消息内容:" + msg); #获取到消息内容

    }

}

分列模式(Fanout)
应用场景:当我们需要将消息一次发给多个队列时,需要使用这种模式
任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有
Queue上。
1.可以理解为路由表的模式
2.这种模式不需要RouteKey
3.这种模式需要提前将Exchange(交换器)与Queue(队列)进行绑定,一个Exchange可以绑定多个
Queue,一个Queue可以同多个Exchange进行绑定。
4.如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。
事先去新建两个队列和一个交换机
在queue中添加队列first和second
新建交换器interchanger
将first和second两个队列绑定到交换器
发送者

@Test
    public void sendMsg1() {
        rabbitTemplate.convertAndSend("interchanger", "", "分裂模式");
    }

消费者first和消费者second

@Component
@RabbitListener(queues = "first")
public class Customer2 {

    @RabbitHandler
    public void getMsg(String msg) {
        System.out.println("消费内容:" + msg);

    }

}

@Component
@RabbitListener(queues = "second")
public class Customer3 {

    @RabbitHandler
    public void getMsg(String msg) {
        System.out.println("消费内容:" + msg);

    }

}

主题模式
应用场景:任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上
简单来说就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的
队列
符号 # 匹配一个或多个词,符号 * 匹配一个词
比如
java.*c就可以匹配到java.cc、java.ac但不能匹配到java.ccc
java.#c就可以匹配到java.ccc、javac
新建一个交换机top添加匹配规则如下:top.good.#
发送方

 @Test
    public void sendMsg2() {
        rabbitTemplate.convertAndSend("top", "top.good.java", "主题模式");
    }

消费方

@Test
public void testSendTopic2(){
		rabbitTemplate.convertAndSend("top","top.goo","主题模式");
	}

结果会显示
sendMsg2方法获取到数据
testSendTopic2方法没有获取到数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值