文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

springBoot整合rabbitmq测试常用模型有哪些

2023-06-26 03:55

关注

这篇文章跟大家分析一下“springBoot整合rabbitmq测试常用模型有哪些”。内容详细易懂,对“springBoot整合rabbitmq测试常用模型有哪些”感兴趣的朋友可以跟着小编的思路慢慢深入来阅读一下,希望阅读后能够对大家有所帮助。下面跟着小编一起深入学习“springBoot整合rabbitmq测试常用模型有哪些”的知识吧。

在企业开发中,我们更多的是使用spring框架来整合其它技术,springboot更是方便的提供了各种starter来快速添加依赖,完成整合,开箱即用。

1.添加依赖

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

2.编写配置

配置信息包括ip,端口,虚拟主机,用户名和密码,和原生java代码所需的配置信息一致。

spring:  application:    name: spirngboot-rabbitmq  rabbitmq:    host: 192.168.20.128    port: 5672    virtual-host: /vh    username: wuwl    password: 123456

3.编写并测试

下面主要针对前五种常用模型,在spirngboot框架的基础上整合rabbitmq并进行测试使用。

springBoot整合rabbitmq测试常用模型有哪些

(1) Hello World模型

这是一种简单的直连模型,生产者将消息直接发送至消息队列,消费者绑定消息队列后直接获取,一对一。
spring-boot-starter-amqp为我们提供了一个org.springframework.amqp.rabbit.core.RabbitTemplate类来方便我们使用rabbitmq,自动注入即可。

生产者测试类:

@SpringBootTest(classes = RabbitmqDemoApplication.class)@RunWith(SpringRunner.class)public class RabbitmqDemoApplicationTests {    @Autowired    private RabbitTemplate rabbitTemplate;    @Test    public void testHelloQueues(){            rabbitTemplate.convertAndSend("hello","hello world");    }}

生产者向名为hello的队列发送消息,但是,在没有消费者的情况下,生产者没有任何意义。另外,convertAndSend方法的第一个参数并不是消息队列的意思,而是routingKey,我们根据源码找到最初定义的接口可以看到以下内容:

void convertAndSend(String routingKey, Object message) throws AmqpException;

第二个参数为Object类型,也就是说可以传递任意类型的对象,该方法将对象转换成一个Amqp消息并发送到一个默认的交换机,并且routingKey为第一个参数的内容,没有提到消息队列的信息,但我们可以分析到,这里的routingKeyqueues应该是同名的。

消费者类:

@Component@RabbitListener(queuesToDeclare = @Queue("hello"))public class HelloQueuesConsumer {    @RabbitHandler    public void consume(String msg){        System.out.println("消费消息:" + msg + " " + System.currentTimeMillis());    }}

上面的代码等同于:

@Componentpublic class HelloQueuesConsumer {    @RabbitListener(queuesToDeclare = @Queue("hello"))    public void consume(String msg){        System.out.println("消费消息:" + msg + " " + System.currentTimeMillis());    }}
@RabbitListener 可以标注在类上面,需配合 @RabbitHandler 注解一起使用
@RabbitListener 标注在类上面表示当有收到消息的时候,就交给 @RabbitHandler 的方法处理,具体使用哪个方法处理,根据 MessageConverter 转换后的参数类型

直接启动测试方法,也就是生产者,可以看到:

springBoot整合rabbitmq测试常用模型有哪些

消费者有接收到消息队列中的信息并打印。

(2) work queues模型

生产者测试方法,类与第一个模型一致

@Testpublic void testWorkQueues(){    for (int i = 0; i < 20; i++) {        rabbitTemplate.convertAndSend("work","work index " + i);    }}

消费者类:

@Componentpublic class WorkQueuesConsumer {    @RabbitListener(queuesToDeclare = @Queue("work"))    public void consume1(String msg){        System.out.println("consumer1消费消息:" + msg);    }    @RabbitListener(queuesToDeclare = @Queue("work"))    public void consume2(String msg){        System.out.println("consumer2消费消息:" + msg);    }}

启动生产者测试方法:

springBoot整合rabbitmq测试常用模型有哪些

消费者一与消费者二均匀分配了队列中的消息任务,即使两者执行效率不一致,也同样是均匀分配。

(3) Publish/Subscribe模型

生产者测试方法:

for (int i = 0; i < 20; i++) {    rabbitTemplate.convertAndSend("amq.fanout","","fanout msg " + i);}

消费者类:

@Componentpublic class FanoutQueuesConsumer {    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.fanout",                            type = "fanout"))})    public void consume1(String msg) {        System.out.println("consumer1消费消息:" + msg);    }    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.fanout",                            type = "fanout"))})    public void consume2(String msg) {        System.out.println("consumer2消费消息:" + msg);    }}

注意此处的交换机信息

启动生产者测试方法:

springBoot整合rabbitmq测试常用模型有哪些

此处只粘贴了部分打印信息,两个消费者获得了相同的消息,生产者将消息发送至交换机,由交换机发送至已注册到交换机的所有临时消息队列,进而消费者获取队列中的消息。

(4) Routing模型

生产者测试方法:

@Testpublic void testDirectQueues(){    rabbitTemplate.convertAndSend("amq.direct","info","routingKey is info");    rabbitTemplate.convertAndSend("amq.direct","warn","routingKey is warn");    rabbitTemplate.convertAndSend("amq.direct","error","routingKey is error");}

routing也成为fanout模型,对应的交换机类型为direct

消费者类:

@Componentpublic class DirectQueuesConsumer {    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.direct",                            type = "direct"),                    key = {"info", "warn", "error"})})    public void consume1(String msg) {        System.out.println("consumer1消费消息:" + msg);    }    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.direct",                            type = "direct"),                    key = "error")})    public void consume2(String msg) {        System.out.println("consumer2消费消息:" + msg);    }}

启动生产者测试类:
springBoot整合rabbitmq测试常用模型有哪些消费者一配置了三种类型的routingKey,所以三种类型的消息都能够接收到,消费者二只能接受到error类型的消息。

(5) Topic模型

生产者测试方法:

@Testpublic void testTopicQueues(){    rabbitTemplate.convertAndSend("amq.topic","file.info","routingKey is info");    rabbitTemplate.convertAndSend("amq.topic","file.warn","routingKey is warn");    rabbitTemplate.convertAndSend("amq.topic","file.error","routingKey is error");}

消费者类:

@Componentpublic class TopicQueuesConsumer {    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.topic",                            type = "topic"),                    key = {"#"})})    public void consume1(String msg) {        System.out.println("consumer1消费消息:" + msg);    }    @RabbitListener(bindings = {            @QueueBinding(value = @Queue,                    exchange = @Exchange(                            value = "amq.topic",                            type = "topic"),                    key = "*.error")})    public void consume2(String msg) {        System.out.println("consumer2消费消息:" + msg);    }}

启动生产者测试方法:

springBoot整合rabbitmq测试常用模型有哪些

消费者一配置的routingKey#,可以接受任意类型的消息,*好代表一个单词,消费者二可以接受任意单词加上.errorroutingKey的消息。

关于springBoot整合rabbitmq测试常用模型有哪些就分享到这里啦,希望上述内容能够让大家有所提升。如果想要学习更多知识,请大家多多留意小编的更新。谢谢大家关注一下编程网网站!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯