(1)接收publisher发送消息
(2)将消息按照规则路由到与之绑定的队列
(1)Fanout(广播)
Fanout Exchange会将接受到的消息广播到每一个跟其绑定的queue,所以也叫广播模式
(2)Direct(定向)
Direct Exchange会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由
(3)Topic(话题)
TopicExchange与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以“.”号分割,且Queue与Exchange指定BindingKey时可以使用通配符
(1)定义一个配置类,使用SpringAMQP提供了几个类,用来声明队列,交换机及其绑定关系
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TopicConfiguration {
//定义一个交换机
@Bean
public TopicExchange topicExchange() {
return ExchangeBuilder.topicExchange("topic_Exchange").build();
}
//定义一个消息队列
@Bean
public Queue topicQueue() {
return QueueBuilder.durable("topic_Queue").build();
}
//定义绑定关系
@Bean
public Binding topicBinding() {
return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.queue.test");
}
}
(2)使用SpringAMQP提供的@RabbitListener注解来声明队列和交换机
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class RabbitListener {
//使用注解定义交换机,消息队列,routingKey值
@org.springframework.amqp.rabbit.annotation.RabbitListener(bindings = @QueueBinding(
value = @Queue(name = "topic_Queue",durable = "true"),//设置队列
exchange = @Exchange(name = "topic_Exchange",type = ExchangeTypes.TOPIC),//设置交换机
key = {"topic.queue.test"}//设置routingKey值,多个routingKey值以数组的形式定义
))
public void pay(String message) throws InterruptedException {
System.out.println("支付模块处理的任务:"+message);
}