RabbitMQ

十年热恋 提交于 2020-08-19 00:33:47

概述

消息服务中间件(如RabbitMQ)可用于异步处理、流量削峰等

RabbitMQ 运行机制

Exchange 类型

​ 分发消息时根据其类型的不同有不同的分发策略:

  • direct:消息中的routing key和队列的routing key一致的队列接受
  • fanout:广播,所有队列都能接受
  • topic:类似模糊匹配

RabbitMQ测试

# 安装
docker pull rabbitmq:3-management

# 运行
docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像id

# 浏览器访问
服务器ip:15672

RabbitTemplate

自定义消息转换器,将数据序列化为json

@Configuration
public class MyAMQPConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
   }
}

测试发送和接受消息

@Autowired
RabbitTemplate rabbitTemplate;

@Test
void send() {
    HashMap<String, Object> map = new HashMap<>();
    rabbitTemplate.convertAndSend("ex-direct","atguigu.news",new Book("入门到入坑","ccb"));
}

@Test
void receive(){
    Object obj = rabbitTemplate.receiveAndConvert("atguigu.news");
    System.out.println(obj);
}

监听消息队列

@SpringBootApplication
@EnableRabbit // 启用监听
public class Springboot2Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot2Application.class, args);
    }
}


@Service
public class BookService {
    @RabbitListener(queues = "atguigu.news")
    public void receive(Object obj){
        System.out.println("收到消息:"+obj);
    }
}

AmqpAdmin

RabbitMQ 系统管理功能组件,可创建和删除 Queue,Exchange,Binding

@Autowired
AmqpAdmin amqpAdmin;

@Test
void create(){
    amqpAdmin.declareExchange(new DirectExchange("ex-admin"));

    amqpAdmin.declareQueue(new Queue("admin.queue",true));

    amqpAdmin.declareBinding(new Binding("admin.queue",Binding.DestinationType.QUEUE,"ex-admin","admin.hahha",null));
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!