首页 > 作文

springBoot整合rabbitmq测试常用模型小结

更新时间:2023-04-04 11:06:58 阅读: 评论:0

目录
1.添加依赖2.编写配置3.编写并测试

之前我们记录了原生java代码使用rabbitmq的方法,很简单,类似于原生jdbc代码一样,将连接对象抽离出来作为工具类,生产者和消费者通过工具类获取连接对象,进而获取通道对象,再注册交换机或者是队列等,发送消息与接收消息。
在企业开发中,我们更多的是使用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    urname: wuwl    password: 123456

3.编写并测试

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

(1) hello world模型

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

生产者测试类:

@springboottest(class = rabbitmqdemoapplication.class)@runwith(springrunner.class)public class rabbitmqdemoapplicationtests {    @autowired    private rabbittemplate rabbittemplate;    @test    public void testhelloqueues(){            rabbittemplate.convertandnd("hello","hello world");    }}

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

/** * convert a java object to an amqp {@link message} and nd it to a default exchange * with a specific routing key. * * @param routingkey the routing key * @param message a message to nd * @throws amqpexception if there is a problem */void convertandnd(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最好听的经典老歌 转换后的参数类型

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

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

(2) work queues模型

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

@testpublic void testworkqueues(){    for (int i = 0; i < 20; i++) {        rabbittemplate.convertandnd("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);    原来有你}}

启动生产者测试方法:

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

(3) publish/subscribe模型

生产者测试方法:

for (int i = 0; i < 20; i++) {    rabbittemplate.convertandnd("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);    }}

注意此处的交换机信息

启动生产者测试方法:

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

(4) routing模型

生产者测试方法:

@testpublic void testdirectqueues(){    rabbittemplate.convertandnd("amq.direct","info","routingkey is info");    rabbittemplate.convertandnd("amq.direct","warn","routingkey is warn");    rabbittemplate.convertandnd("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);    }}

启动生产者测试类:

消费者一配置了三种类型的routingkey,所以三种类型的消息都能够接收到,消费者二只能接受到error类型的消息。

(5) topic模型

生产者测试方法:

@testpublic void testtopicqueues(){    rabbittempla机灵的近义词te.convertandnd("amq.topic","file.info","routingkey is info");    rabbittemplate.convertandnd("amq.topic","file.warn","routingkey is warn");    rabbittemplate.convertandnd("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);    }}

启动生产者测试方法:

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

到此这篇关于springboot整合rabbitmq并测试五种常用模型的文章就介绍到这了,更多相关springboot整合rabbitmq内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 11:06:57,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d8c4e6d312d5561f4e2207122ce09e28.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:springBoot整合rabbitmq测试常用模型小结.doc

本文 PDF 下载地址:springBoot整合rabbitmq测试常用模型小结.pdf

标签:消息   生产者   消费者   队列
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图