TCP 长连接
Channel
RabbitMQ的5大核心概念:Connection(连接)、Channel(信道)、Exchange(交换机)、Queue(队列)、Virtual host(虚拟主机)
Connection与Channel之间的关系可以比作光纤电缆,如果把Connection比作一条光纤电缆,那么Channel就相当于是电缆中的一束光纤。
不同的用户在访问同一个RabbitMQ Broker时,可以创建自己单独的Virtual host,然后在自己的Virtual host中创建Exchange和Queue,很好地做到了不同用户之间相互隔离的效果。
Exchange的4种类型了:direct、fanout、topic、headers。
fanout: 可以在服务器内复制消息给多个queue,topic按正则路由。
百度安全验证https://baijiahao.baidu.com/s?id=1732891548341088166&wfr=spider&for=pc
- 拉模式
可以削峰,放在循环里面拉,需要睡眠一小会。
String bridgeQueueName = extractorProperties.getBridgeQueueName(); int batchSize = extractorProperties.getBatchSize(); List<GetResponse> responseList = Lists.newArrayListWithCapacity(batchSize); long tag = 0; while (responseList.size() < batchSize) { GetResponse getResponse = channel.basicGet(bridgeQueueName, false); if (getResponse == null) { break; } responseList.add(getResponse); tag = getResponse.getEnvelope().getDeliveryTag(); } if (responseList.isEmpty()) { TimeUnit.MILLISECONDS.sleep(1); } else { logger.info("Get <{}> responses this batch", responseList.size()); // handle messages channel.basicAck(tag, true); } |
- 推模式