java xml 推模式 拉模式_RabbitMQ 各种工作模式测试(JAVA)

1. 简单模式

1.1 图示

acf8e1c9783d7d9326a8016404502aa8.png

从图上看,和JDK本身一样,生产者往队列添加数据,消费者从队列拿数据,如果业务场景确实这么简单,还可以使用redis的集合来代替,减少整个系统的复杂度,系统越简单问题越少

1.2 测试代码

public class RabbitMQ {

Logger logger = LoggerFactory.getLogger(RabbitMQ.class);

private ConnectionFactory factory;

// 初始化连接工厂

@Before

public void init() {

factory = new ConnectionFactory();

// 设置相关参数

factory.setHost("192.168.245.128");

factory.setPort(5672);

factory.setVirtualHost("/jt");

factory.setUsername("admin");

factory.setPassword("12340101");

}

@Test

public void simpleSend() throws Exception {

// 1.获取连接

Connection conn = factory.newConnection();

// 2.从连接获取信道

Channel channel = conn.createChannel();

// 3.利用channel声明一个队列

/*

queue 表示声明的queue对列的名字

durable 表示是否持久化

exclusive 表示当前声明的queue是否被当前信道独占

true:当前连接创建的任何channel都可以连接该queue

false:只有当前channel可以连接该queue

autoDelete Boolean类型:在最后连接使用完成后,是否删除队列,false

arguments 其他声明参数封装到map中传递给mq

*/

channel.queueDeclare("simple", false, false, false, null);

// 4.发送消息

/*

exchange 交换机名称,简单模式使用默认交换,该值设置为""

routingkey 当前的消息绑定的routingkey,简单模式下,与队列同名即可

props 消息的属性字段对象,例如BasicProperties,可以设置一个deliveryMode的值0 持久化,1 表示不持久化,durable配合使用

body 消息字符串的byte数组

*/

channel.basicPublish("", "simple", null, "简单模式的消息发送".getBytes());

}

@Test

public void simpleReciever() throws Exception {

// 1.获取连接

Connection conn = factory.newConnection();

// 2.获取信道

Channel channel = conn.createChannel();

// 3.绑定队列

channel.queueDeclare("simple", false, false, false, null);

// 4.创建一个消费者

QueueingConsumer consumer = new QueueingConsumer(channel);

// 5.绑定消费者和队列

channel.basicConsume("simple", consumer);

// 6.获取消息

while(true) {

Delivery delivery = consumer.nextDelivery();

String msg=new String(delivery.getBody());

System.out.println(msg);

}

}

}

2. 工作模式

2.1 图示

889876715ee18270f7d4b820632d8f5a.png

一个队列由多个消费者共享,如果消费者处理速度落后于生产者,可以不断扩充消费,提高消息的处理能力

注意:这种模式队列的数据一旦被其中一个消费者拿走,其他消费者就不会再拿到,与下面的订阅发布模式不一样,它提供了两个队列,消息有两份

2.2 测试代码

@Test

public void workSender() throws Exception{

Connection conn = factory.newConnection();

Channel channel = conn.createChannel();

channel.queueDeclare("work", false, false, false, null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值