首页 > 其他分享 >RabbitMq 简单学习

RabbitMq 简单学习

时间:2022-12-19 17:45:04浏览次数:34  
标签:队列 简单 springframework 学习 RabbitMq org test import public

RabbitMQ

一、五个模式

简单模式


默认一个交换机,一个队列,一个消费者,一条队列里面的消息只能被一个消费者消费
应用场景:一对一,如手机短信,邮件

work(争抢)模式


默认一个交换机,消费者从队列中获取消息,逐条获取,如消费者1获取消息1、3、4,消费者2获取消息2、4、6
应用场景:抢红包,资源分配系统

Pub/Sub(发布订阅)模式


rabbitmq 交换机将消息同时发布到不同的队列中,消费者从绑定的队列中获取相应的消息进行消费
应用场景:广告,消息推送

rooting(路由模式)


交换机通过绑定的key,将不同的消息发送到不同的队列中,消费者从队列中获取进行消费
应用场景:不同等级的log日志输出(如只有error等级的log日志才需要进行数据库存储)、短信、聊天工具

Tpoic(通配符模式)


在路由器的基础上,增加key的通配符匹配功能,只有匹配上的key才会分配到对应的队列中
通配符: # :表示匹配多个字符 * :表示匹配一个字符
例: #.order.# :表示匹配前后多个字符,如 test.order order.test 均可匹配
*.order : 表示前面需要匹配一个字符,如test.order 可匹配,order.test不能匹配
应用场景:多级分配

二、SpringBoot集合RabbitMQ

1、yml引入配置

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

2、生产者

步骤

1、创建交换机
2、创建队列
3、通过指定的key绑定队列和交换机
4、发送消息

configuration中的配置代码

import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.ExchangeBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ProduceRabbitConfiguration {

    public static final String EXCHANGE_TEST = "exchange_test";
    public static final String QUEUE_TEST= "queue_test";
    public static final String ROUTINTKEY_TEST = "test.#";  //配置路由通配符规则

//    创建交换机
    @Bean("bootExchage")  //交由spring容器管理
    public Exchange bootExchage(){
        return ExchangeBuilder.topicExchange(EXCHANGE_TEST).durable(true).build();
    }

//    队列
    @Bean("bootQueue")
    public Queue bootQueue(){
        return new Queue(QUEUE_TEST);
    }

//    队列交换机绑定,指定key
    @Bean
    public Binding ROUNTINGKEY_TEST(@Qualifier("bootExchage") Exchange exchange,@Qualifier("bootQueue") Queue queue){
        return BindingBuilder.bind(queue).to(exchange).with(ROUTINTKEY_TEST).noargs();
    }
}

bean标签,将创建的队列和交换机交给spring容器进行管理

发送消息

import com.rabbit.producer.ProduceRabbitConfiguration;
import com.rabbit.rabbitProducerApplication;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
@SpringBootTest(classes = {rabbitProducerApplication.class})
public class rabbitTest {

    @Autowired
    RabbitTemplate rabbitTemplate;

    @Test
     public void rabbitTest(){
         String message = "这是body的内容";
//         rabbitTemplate.convertAndSend(ProduceRabbitConfiguration.EXCHANGE_TEST,"text.boot",message);
         String response = String.valueOf(rabbitTemplate.convertSendAndReceive(ProduceRabbitConfiguration.EXCHANGE_TEST,"test.boot",message));
         System.out.println(response);
     }
}

rabbitTemplate.convertAndSend():发送消息,没有返回信息;

rabbitTemplate.convertSendAndReceive():发送消息并接收返回信息;

3、消费者

使用@RabbitListener(queues = "queue_test")标签在对应方法上,监听队列,当队列中有消息时,自动拿过来消费执行代码;
“queue=” :监听指定的队列
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class ComsumerRabbit {

    @RabbitListener(queues = "queue_test")
    public void lister(Message message){
        System.out.println("------------->"+message);
    }
}

(以上图为网上引用,如有侵权还请联系我更改)
分割线:待继续学习继续补充==============

标签:队列,简单,springframework,学习,RabbitMq,org,test,import,public
From: https://www.cnblogs.com/caijilin/p/16992708.html

相关文章