spring boot整合RabbitMQ —— 十分钟急速上手

安装运行rabbitmq

1.docker安装rabbitmq:
docker run -it --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management

2.访问localhost:15672
在这里插入图片描述

3.创建虚拟主机:(如果默认用guest账号则跳过3,4,5这三步骤)
在这里插入图片描述
4.创建用户:
在这里插入图片描述

5.赋予ems用户权限:
在这里插入图片描述
六种模型(老版本,现在为七种):

在这里插入图片描述

spring boot整合RabbitMQ

hello world模型(点对点消费)

1.创建springboot项目添加rabbitmq依赖
在这里插入图片描述
2.编写配置文件

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: ems
    password: 123
    virtual-host: /ems

如果没做3,4,5步,则配置为:

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest

3.在Test类中创建生产者

@SpringBootTest
class RabbitmqSpringbootApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    void testhelloworld() {
    	//第一个参数:发送的队列 第二个参数: 发送的信息
        rabbitTemplate.convertAndSend("hellosr","hello spring boot rabbitmq");
    }

}

4.在启动类同级目录下创建消费者

@Component
@RabbitListener(queuesToDeclare = @Queue("hellosr"))
public class helloconsumer {

    @RabbitHandler
    public void receivel(String message) {
        System.out.println(message);
    }

}

5.运行生产者:
在这里插入图片描述
消息发送成功

我们查看管理界面可以看到多了个队列:
在这里插入图片描述

2.workqueue模式(拿到消息即销毁)

1.生产者


    @Test
    void testwork() {
        for (int i = 0; i < 10; i++) {
            rabbitTemplate.convertAndSend("worksr", "hello spring boot rabbitmq"+i);

        }
    }

2.消费者1,2

@Component
public class consumer {

    @RabbitListener(queuesToDeclare = @Queue("worksr"))
    public void receivel(String message) {
        System.out.println("C1  :"+message);
    }

    @RabbitListener(queuesToDeclare = @Queue("worksr"))
    public void receivel2(String message) {
        System.out.println("C2  :"+message);
    }

}

3.运行:
在这里插入图片描述

3.Publish模型(发布订阅/fanout模型)

1.创建生产者:

    @Test
    void testfanout() {
        rabbitTemplate.convertAndSend("fanoutsr", "","hello spring boot rabbitmq");
    }

2 .消费者

@Component
public class Consumer1 {

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "fanoutsr",type = "fanout")
            )
    })
    public void receivel(String message) {
        System.out.println("C1  :"+message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "fanoutsr",type = "fanout")
            )
    })
    public void receivel2(String message) {
        System.out.println("C2  :"+message);
    }

}

3.运行:
在这里插入图片描述

4.Routing(静态路由模型)

指定routingkey,如果消费者拥有和生产者相同的routingkey就可以接受到生产者发送的信息

1.生产者:

  @Test
    void testRoute() {
        rabbitTemplate.convertAndSend("routesr", "info","hello spring boot rabbitmq");
    }

2.消费者:

@Component
public class RouteConsumer {
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "routesr", type = "direct"),
                    key ={"error"}
            )
    })
    public void receivel(String message) {
        System.out.println("C1  :"+message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "routesr",type = "direct"),
                    key ={"error","info"}
            )
    })
    public void receivel2(String message) {
        System.out.println("C2  :"+message);
    }

}

3.运行:
在这里插入图片描述
只有info的信息接收到了

5.topics(动态路由)

1.生产者:


    @Test
    void testTopic() {
        rabbitTemplate.convertAndSend("topicsr", "order.save.oid","hello spring boot rabbitmq");
    }

2.消费者:

@Component
public class TopicConsumer {
    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "topicsr", type = "topic"),
                    key ={"order.*"}
            )
    })
    public void receivel(String message) {
        System.out.println("C1  :"+message);
    }

    @RabbitListener(bindings = {
            @QueueBinding(
                    value = @Queue,//声明临时队列
                    exchange = @Exchange(value = "topicsr",type = "topic"),
                    key ={"order.#"}
            )
    })
    public void receivel2(String message) {
        System.out.println("C2  :"+message);
    }

}

3.运行:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掉头发的王富贵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值