1.声明
当前内容用于本人学习和分析,当前内容主要是Exchange的基本介绍
由于前面分析了AMQP协议,发现了其中的内容:消息发送者,exchange,bind,queue,消息消费者,由于生产者、消费者还有queue都是比较简单的,所以难点在于exchange和bind,这里主要讨论exchange
2.Exchange的主要作用
交换是发送消息的AMQP 0-9-1实体。交换接收一条消息并将其路由到零个或多个队列中
。使用的路由算法取决于 交换类型和称为绑定的规则
主要作用:接收消息并通过路由算法实现分发消息到一个队列或者多个队列
3.Exchange的类型
基本的四个类型:Direct exchange|Fanout exchange|Topic exchange|Headers exchange
查看和对比ui界面
发现使用springboot常见的queue直接就是topic类型,直接使用的和默认创建的exchange就是topic类型
4.Exchange中的属性
从上面发现Exchange支持持久化?为什么不是消息持久化?可以配置名称和配置自动删除属性。可以配置特定的参数
对比ui界面
发现一个exchange可以配置的属性为:Name、Type、Durability、Auto delete、Internal、Argunments
发现通过ui添加时发现多了一个参数Internal
5.通过类方式查看Exchange
发现这个类中具有多个接口:Delcare(声明一般用于声明一个queue)、DeclareOk(表示声明成功的返回对象)、Delete(删除)、DeleteOk(表示删除成功返回的对象)、Bind(用于绑定exchange到queue的规则)、BindOk(表示路由绑定成功的返回对象)、Unbind(接触路由绑定)、UnbindOk(表示解除绑定成功的返回的对象)
查看其内部类Builder
public static final class Builder
{
private int ticket = 0;
private String exchange;
private String type = "direct";
private boolean passive = false;
private boolean durable = false;
private boolean autoDelete = false;
private boolean internal = false;
private boolean nowait = false;
private Map<String,Object> arguments = null;
public Declare build() {
return new com.rabbitmq.client.impl.AMQImpl.Exchange.Declare(ticket, exchange, type, passive, durable, autoDelete, internal, nowait, arguments);
}
}
通过源码发现这个Exchange实际上就是通过Builder创建的,返回的实际类型为com.rabbitmq.client.impl.AMQImpl.Exchange
发现这个type实际上是用字符串方式实现,当前的arguments是map集合创建的,返回的结果为不可修改的map
6.总结
1.通过分析Exchange这个交换机发现其中具有可以持久化的属性,并且可以携带参数,带有自动删除属性
2.Exchange中具有四种类型
以上纯属个人见解,如有问题请联系本人!