rabbitmq一些概念

1、参考文档

官网
RabbitMQ中文文档

2、重要概念

2.1 virtual hosts

虚拟主机,一个虚拟主机相当于一个独立的空间,虚拟主机之间是相互隔离、互不影响的。

2.2 producer

生产者,投递消息的一方

2.3 consumer

消费者,接收消息的一方
消费者定义

DefaultConsumer consumer = new DefaultConsumer(channel) {
  @Override
  public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
      throws IOException {
    System.out.println("接收到消息:" + new String(body, "UTF-8"));
    // 手动消息签收
    channel.basicAck(envelope.getDeliveryTag(), false);
  }
};

2.4 connection

连接,生产者或者消费者与rabbit服务器之间建立的长连接(默认端口是5672)
建立连接的过程如下

// 1.定义连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 2.设置服务器地址
factory.setHost("127.0.0.1");
// 3.设置协议端口号
factory.setPort(5672);
// 4.设置vhost
factory.setVirtualHost("/test");
// 5.设置用户名称
factory.setUsername("test");
// 6.设置用户密码
factory.setPassword("test");
// 7.创建新的连接
Connection connection = factory.newConnection();

2.5 channel

通道,主要用于投递消息和接收消息
常见api

// 创建通道
Channel channel = connection.createChannel();

// 创建队列声明
// 注意:第二个参数为是否持久化,true:持久化,false:不持久化。持久化的队列数据,会存到硬盘上,在rabbitmq重启或者宕机后,还会保留。
channel.queueDeclare("queue", false, false, false, null);

// 交换机与队列绑定
channel.queueBind("queue", "exchange", "routingKey");

// 绑定交换机
// 注意:第二个参数为交换机类型,【direct,fanout,topic,headers】
channel.exchangeDeclare("exchange", "fanout");

// 发送消息
channel.basicPublish("exchange", "routingKey", null, "msg".getBytes());

// 消息流量控制
channel.basicQos(1);

// 绑定消费者
// 注意:第二个参数false:表示需要手动签收消息;如果为true,自动签收消息
channel.basicConsume(queue, false, consumer);
// 手动签收消息
channel.basicAck(envelope.getDeliveryTag(), false);

2.6 exchange

交换器,指定消息路由规则,发送到哪个队列

交换机种类

  1. direct:简单队列与工作队列使用此交换机类型

可以不绑定交换机,使用默认的交换机即可,把消息路由到那些RouteKey与queue名字完全一致的Queue中。

  1. fanout:发布订阅用的此类型交换机

不处理RouteKey ,绑定【fanout】类型交换机,把所有发送到fanout Exchange的消息都转发到与该Exchange 绑定(Binding)的所有Queue上

  1. topic:主题模式

绑定【topic】类型交换机,会根据RouteKey匹配规则来转发消息到对应的队列中
RouteKey主要有两个通配符:*,匹配一个单词;#,匹配一个到多个单词

  1. headers

根据发送的消息内容中的headers属性进行匹配。未实际测试

2.7 queue

队列,交换器接收到消息后,会根据路由规则,投递到一个或者多个队列中;如果按路由策略找不到对应的队列,消息会被丢弃。

2.8 bindding

绑定关系,绑定交换机、队列,并设置路由策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章