使用 spring-amqp 实验
发布订阅模型
fanoutExchange 实验
实验步骤:
- 编写定义 队列 和 交换机 绑定关系的代码
- 创建接口,模拟生产者,方便调试(接受参数 队列名、路由键、[消息])
- 定义消费者
代码示例:
@Configuration
public class FanoutConfig {
@Bean
public FanoutExchange fanoutexchange() {
//创建广播模式交换机
return new FanoutExchange("yoj.fanoutexchange");
}
// 创建队列
@Bean
public Queue fanoutQueue() {
return new Queue("fanout.queue1");
}
// 绑定交换机和队列之间的关系
@Bean
public Binding bindingQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange) {
return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
}
}
@GetMapping("/testMQ/{queueName}/{routingKey}")
public BaseResponse<String> testMQ(@PathVariable("queueName") String queueName, @PathVariable("routingKey") String routingKey) {
rabbitTemplate.convertAndSend(queueName, routingKey, "编译执行代码,返回结果");
return ResultUtils.success("发送成功");
}
实验效果
发消息
在队列中接受到了消息
direct 案例
- 定义 关系
@RabbitListener(bindings = @QueueBinding(value=@Queue("direct.queue1"), exchange = @Exchange(name="direct.exchange", type = ExchangeTypes.DIRECT), key={"direct.key1"}))
public void directQueue1Listen(String in) {
System.out.println("direct.queue1:Received message: " + in);
}
@RabbitListener(bindings = @QueueBinding(value=@Queue("direct.queue2"), exchange = @Exchange(name="direct.exchange", type = ExchangeTypes.DIRECT), key={"direct.key2"}))
public void directQueue2listen(String in) {
System.out.println("direct.queue2:Received message: " + in);
}