Rabbitmq学习
amqp介绍
高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计
- 主要特征是面向消息,队列,路由(包括点对点的订阅和发布),可靠性,安全
rabbitmq基础
使用com.rabbitmq:amqp-client:4.0.3
demo代码地址: https://github.com/lynl001/amqp-rabbit/
- Connection:与rabbitserver建立的一个连接,由ConnectionFactory创建,虽然创建时指定了多个server地址,但是只与一个物理的server进行连接,此连接基于Socket进行连接
ConnectionFactory connectionFactory = new ConnectionFactory();
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setHost(host);
connectionFactory.setVirtualHost(vhost);
Connection connection = connectionFactory.newConnection();
- Channel:建立在Connection上的一个通道,相对于Connection来说,他是轻量级的;
Channel channel=connection.createChannel();
注意:尽量避免在多线程中使用一个channel,必须保证一个一次只处理一个请求
- Exchange,Queue,Route
一个消息传递模型:
生产者P发送信息,消息经过exchange和route进入Queue,消费者C只负责到指定队列中获取Message
- Broker:消息队列服务器实体。
- Route Key:路由关键字,exhange根根据这个关键字进行消息的投递
- Queue:消息队列载体,每个消息都会投入到一个或多个队列
- Binding:绑定,把exchange和queue根据路由规则绑定起来
- vhost:虚拟主机,一个broker可以开设多个vhost,用作不同用户的权限分离
- channel: 消息通道,在客户端的每个连接可以建立多个channel,每个channel代表一个回话任务
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
1. Fanout Exchange:广播模式,会将message广播到所有与Exchang绑定的queue中,适用与所有消费者都要处理(队列不做区分)
2. Direct Exchange:默认的Exchange,不用指定routing key,默认routekey与queue同名,适用与将一个message分发到不同的queue即消费者,在消费者之间做了一个均衡
3. Topic Exchange:发布订阅模式,根据routingkey和exchange类型将一个message发布到一个或多个Queue中,需要事件消息的人只需要绑定对应exchange(在derect的基础上添加routeKey可以进行包名匹配)
4. Headers Exchange:根据Message的头部信息来匹配(rpc),客户端包括发送与接收