rabbitmq中的exchange和binding

exchange

 

producer从不直接发送任何信息给队列,甚至不知道消息会发送到哪个队列中

生产者只能将消息发送给exchange,exchaage是一个很简单的模型,一方面接收生产者的消息,另一方面将它们放入队列

exchange知道如何处理它接收到 的消息,是放入特定的队列?还是放入多个队列?还是被丢弃,这些都是exchange中定义的类型

623bd2dcc88e47910e9c11b785f1bafc7f0.jpg

 

有多种类型的exchange,如 direct.topic,headers, fanout我们关注最后一个fanout,它广播收到的所有消息到所有的队列

 

临时队列

当我们连接到rabbitmq时需要一个新的空队列,这时我们可以随机创建一个队列,当我们断开消费者的时候,队列将会自动被删除

 

绑定bindings

f245b2b549521b0567a71c589abee225b56.jpg

我们已经创建了一个exchange和queue,接下来需要告诉exchange发送消息到队列中,exchange和queue之间的关系就叫binding

d2d93e8b187ae7329fdc1d15bfa8a623b5f.jpg

 

 

连接管理,错误处理

连接恢复,并发,metric collection

 

 

相关的练习代码如下

public class ReceiveLogs {

private static final String EXCHANGE_NAME = "logs";

public static void main(String[] args) throws Exception {

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

Connection connection = factory.newConnection();

Channel channel = connection.createChannel();

channel.exchangeDeclare(EXCHANGE_NAME, "fanout");

//随机给定队列名

String queueName = channel.queueDeclare().getQueue();

//建立binding

channel.queueBind(queueName, EXCHANGE_NAME, "");

System.out.println("[x] waiting for messages .to exit press c");

 

DeliverCallback deliverCallback = ((consumerTag, delivery) -> {

String message = new String(delivery.getBody(), "UTF-8");

System.out.println("[x] received '" + message + "'");

});

channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {

});

}

}

 

public class Recv {

 

private final static String QUEUE_NAME = "hello";

public static void main(String[] args) throws IOException, TimeoutException {

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

Connection connection = factory.newConnection();

Channel channel = connection.createChannel();

channel.queueDeclare(QUEUE_NAME, false, false, false, null);

System.out.println("[*] waiting for messages.");

 

DeliverCallback deliverCallback = (consumerTag, delivery) -> {

String message = new String(delivery.getBody(), "UTF-8");

System.out.println(" [x] received '" + message + "'");

};

channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {

});

}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/iioschina/blog/3020790

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值