RabbitMQ工具包
主要实现:
1:不需要其他操作,使用者只需要提供一个队列的名称
2:可扩展,需要其他功能时可以兼容扩展
测试结果
1:多线程下无法保证消费顺序
2:单线程下是以轮询的方式进行消费且能够保证消费顺序
3:现在支持多消费者,如果需要单独消费者则只需要改下参数,改成独占模式,代码里有注释
4:多线程1000个情况下暂没发现重复消费的情况
目录
- RabbitMQ工具包
- 测试结果
- 一:导包
- 二:结构
- 三:逻辑&&代码
- 1:config包
- 2:demo包
- 3:connection包
- 3:consumer包
- 4:entity包
- 5:provider包
- 四:具体流程
- 五:后续修改
- 五:未完待续
一:导包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
一个amqp客户端包和amqp协议包
二:结构
三:逻辑&&代码
1:config包
1:Config类中保存RabbitConnection连接的所有参数,如:用户名,密码,虚拟地址等
2:Dict类中保存着RabbitMq的默认交换机名称和类型Dirct,Fanout,Topic等
2:demo包
RabbitDemo类中主要是一些使用方法和说明
3:connection包
1:RabbitChannel类是获取RabbitMQ管道的类,在RabbitMQ中管道是连接的方式
这里面的配置基本上是默认设置,如果需要其他功能只需要添加参数即可
2:RabbitConnection类是用于获取RabbitMQ连接
3:consumer包
1:ConsumerMke类是消费者实现类:代码为提供消费者消费的实现,不是具体实现过程
2:ConsumerRki类:主要是实现ConsumerSvi接口,获取参数,设置参数,获取管道(Channel)--就截一小截图
3:ConsumerSvi类:提供接口,方便实现
4:ConsumerTem类:因为消费者调用时使用的内部类所以为了做成工具包,我就提供了Tem类用于写具体消费过程
4:entity包
1:ChannelDto:主要是获取管道的一些参数
5:provider包
1:ProviderMke类:生产者实现类--用于发送消息,今天又加了个过期时间设置
2:ProviderRki类:生产者接口实现类--
这个和消费者接口实现类大同小异,多了个过期时间设置(过期时间分单条消息过期时间和队列消息过期时间,我这里是使用的单条消息过期时间)
3:ProviderSvi类:生产者接口类--提供参数接口方便填写参数
四:具体流程
五:后续修改
由于测试发现当有大量消费者时,RabbitMQ会创建等同数量的管道和连接,但是创建大量TCP连接会消耗过多的资源,所以我修改成一个连接生成5个管道
五:未完待续
这个工具包现在能够进行简单的发消息和消费消息,但是是远远不够的,这段时间我看能不能实现更多更复杂的功能,当然使用这工具要越来越简单
最后希望大家能给予建议和创造性的想法 谢谢. -- 如果有人需要源码来批判我 可以私聊我...