RabbitMQ四种工作模式
创建队列
public final static String USER_LOG = "user.log";
@Bean
public Queue userLogQueue() {
return new Queue(USER_LOG, true, false, false);
}
DIRECT
public final static String DIRECT_EXCHANGE = "directExchange";
@Bean(DIRECT_EXCHANGE)
public DirectExchange directExchange() {
return new DirectExchange(DIRECT_EXCHANGE, true, false);
}
private final static String DIRECT_ROUTER_KEY = "direct.user.log";
@Bean
public Binding bindingUserLogByDirect(Queue userLogQueue, DirectExchange exchange) {
return BindingBuilder.bind(userLogQueue).to(exchange)
.with(DIRECT_ROUTER_KEY)
}
TOPIC
public final static String TOPIC_EXCHANGE = "topicExchange";
@Bean(TOPIC_EXCHANGE)
public TopicExchange topicExchange() {
return new TopicExchange(TOPIC_EXCHANGE, true, false);
}
public final static String TOPIC_ROUTER_KEY = "topic.user.log.*";
@Bean
public Binding bindingUserLogByTopic(Queue userLogQueue, TopicExchange exchange) {
return BindingBuilder.bind(userLogQueue).to(exchange).with(TOPIC_ROUTER_KEY);
}
FANOUT
public final static String FANOUT_EXCHANGE = "fanoutExchange";
@Bean(FANOUT_EXCHANGE)
public FanoutExchange fanoutExchange() {
return new FanoutExchange(FANOUT_EXCHANGE, true, false);
}
@Bean
public Binding bindingUserLogByFanout(Queue userLogQueue, FanoutExchange exchange) {
return BindingBuilder.bind(userLogQueue).to(exchange);
}
HEADERS
@Bean(HEADERS_EXCHANGE)
public HeadersExchange headersExchange() {
return new HeadersExchange(HEADERS_EXCHANGE, true, false);
}
@Bean
public Binding bindingUserLogByHeaders(Queue userLogQueue, HeadersExchange exchange) {
Map<String, Object> headers = new HashMap<>();
headers.put("headers1", "value1");
return BindingBuilder.bind(userLogQueue).to(exchange)
.whereAny(headers).match();
}
@PostMapping("/sendByHeaders")
public String sendByHeaders(String str) {
MessageProperties messageProperties = new MessageProperties();
messageProperties.setHeader("headers1", "value1");
messageProperties.setHeader("headers2", "value2");
Message msg = new Message(str.getBytes(), messageProperties);
rabbitTemplate.convertAndSend(RabbitMQConfig.FANOUT_EXCHANGE, "", str);
return "SUCCESS";
}