Spring Boot整合RabbitMQ

RabbitMQ

Docker安装RabbitMQ

docker run -d --hostname my-rabbit --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:3-management

Spring Boot整合Rabbit MQ

配置MQ的基本信息

spring.rabbitmq.port=8888
spring.rabbitmq.host=120.25.241.237
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
Direct
  1. 配置队列

    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 you猿
     * @Date 2020/5/29 17:16
     */
    @Configuration
    public class RabbitDirectConfig {
        public final static String DIRECTNAME = "sang-direct";
    
        @Bean
        Queue queue(){
            return new Queue("hello-queue");
        }
    
        @Bean
        DirectExchange directExchange(){
            return new DirectExchange(DIRECTNAME,true,false);
        }
    
        @Bean
        Binding binding(){
            return BindingBuilder.bind(queue()).to(directExchange()).with("direct");
        }
    
    }
    
    
  2. 配置消费者

    @Component
    public class DirectReceive {
        @RabbitListener(queues = "hello-queue")
        public void handler(String msg){
            System.out.println("DirectReceive>>>>"+msg);
        }
    }
    
  3. 测试

    @Autowired
    RabbitTemplate rabbitTemplate;
    @Test
    void contextLoads() {
        rabbitTemplate.convertAndSend("hello-queue","youyuan");
    }
    
Fanout

步骤与上面类似

//1
@Configuration
public class RabbitFanoutConfig {
    public final static String FANOUTNAME = "sang-fanout";
    @Bean
    FanoutExchange fanoutExchange(){
        return new FanoutExchange(FANOUTNAME,true,false);
    }

    @Bean
    Queue queueOne(){
        return new Queue("queue-one");
    }

    @Bean
    Queue queueTwo(){
        return new Queue("queue-two");
    }

    @Bean
    Binding bindingOne(){
        return BindingBuilder.bind(queueOne()).to(fanoutExchange());
    }

    @Bean
    Binding bindingTwo(){
        return BindingBuilder.bind(queueTwo()).to(fanoutExchange());
    }
}
//2.
package org.youyuan.rabbitmq.receive;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Author you猿
 * @Date 2020/5/29 19:10
 */

@Component
public class FanoutReceiver {
    @RabbitListener(queues = "queue-one")
    public void handler1(String msg){
        System.out.println("FanoutReceiver:handler1="+msg);
    }

    @RabbitListener(queues = "queue-two")
    public void handler2(String msg){
        System.out.println("FanoutReceiver:handler1="+msg);
    }
}
//3.
@Test
public void test1(){
    rabbitTemplate.convertAndSend(RabbitFanoutConfig.FANOUTNAME,null,"hello youyuan");
}
Topic
//1
@Configuration
public class RabbitTopicConfig {

    public final static String TOPICNAME = "sang-topic";

    @Bean
    TopicExchange topicExchange(){
        return new TopicExchange(TOPICNAME,true,false);
    }

    @Bean
    Queue xiaomi(){
        return new Queue("xiaomi");
    }

    @Bean
    Queue huawei(){
        return new Queue("huawei");
    }

    @Bean
    Queue phone(){
        return new Queue("phone");
    }

    @Bean
    Binding xiaomiBinding(){
        return BindingBuilder.bind(xiaomi()).to(topicExchange()).with("xiaomi.#");
    }

    @Bean
    Binding huaweiBinding(){
        return BindingBuilder.bind(huawei()).to(topicExchange()).with("huawei.#");
    }

    @Bean
    Binding phoneBinding(){
        return BindingBuilder.bind(phone()).to(topicExchange()).with("phone.#");
    }
}
//2
package org.youyuan.rabbitmq.receive;

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @Author you猿
 * @Date 2020/5/29 19:34
 */
@Component
public class TopicReceiver {

    @RabbitListener(queues = "xiaomi")
    public void handler1(String msg){
        System.out.println("xiaomiReceiver"+msg);
    }

    @RabbitListener(queues = "huawei")
    public void handler2(String msg){
        System.out.println("huaweiReceiver"+msg);
    }

    @RabbitListener(queues = "phone")
    public void handler3(String msg){
        System.out.println("phoneReceiver"+msg);
    }
}
//3.
@Test
public void test2(){
    rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"xiaomi.news","小米新闻");
    rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"huawei.news","华为新闻");
    rabbitTemplate.convertAndSend(RabbitTopicConfig.TOPICNAME,"phone.news","phone新闻");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值