springBoot整合RabbitMq相关使用
相关springboot和rabbitMq需要导入的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml配置文件所需要的配置
spring:
rabbitmq:
host: ####
port: ####
username: ####
password: ####
之前是在消费者中来声明队列,交换机和绑定关系,现在创建一个配置类来完成这些操作
@Configuration
public class QueueConfig {
/**
* 普通交换机名称
*/
public static final String X_EXCHANGE="X";
/**
* 队列A
*/
public static final String QUEUE_A="QA";
/**
* 队列B
*/
public static final String QUEUE_B="QB";
/**
* 声明X交换机
* xExechange
* @return
*/
@Bean("xExechange")
public DirectExchange xExechange(){
return new DirectExchange(X_EXCHANGE);
}
/**
* 声明Y交换机
* yExechange
* @return
*/
@Bean("yExechange")
public DirectExchange yExechange(){
return new DirectExchange(Y_DEAD_LETTER_EXCHANGE);
}
/**
* 声明queueA
* @return
*/
@Bean("queueA")
public Queue queueA(){
return QueueBuilder.durable(QUEUE_A).build();
}
/**
* 声明queueB
* @return
*/
@Bean("queueB")
public Queue queueB(){
return QueueBuilder.durable(QUEUE_B).build();
}
/**
* 声明绑定关系 queueABindingX
* @param queueA
* @param xExechange
* @return
*/
@Bean
public Binding queueABindingX(@Qualifier("queueA") Queue queueA,
@Qualifier("xExechange")DirectExchange xExechange){
return BindingBuilder.bind(queueA).to(xExechange).with("XA");
}
/**
* 声明绑定关系 queueBBindingX
* @param queueB
* @param xExechange
* @return
*/
@Bean
public Binding queueBBindingX(@Qualifier("queueB") Queue queueB,
@Qualifier("xExechange")DirectExchange xExechange){
return BindingBuilder.bind(queueB).to(xExechange).with("XB");
}
发送消息使用springboot提供的
rabbitTemplate
类
@RestController
@RequestMapping("/send/message/")
public class SendMessageController {
@Autowired
private RabbitTemplate rabbitTemplate;
@GetMapping("{msg}")
public String sendMessage(@PathVariable("msg") final String msg){
// 发送消息到指定队列中
rabbitTemplate.convertAndSend(QueueConfig.X_EXCHANGE,"XC",msg);
return msg;
}
}
消费消息使用
@RabbitListener
注解
@Slf4j
@Component
public class DeadLetterQueueCustomer {
/**
* 消费消息
* @param message
* @param channel
*/
@RabbitListener(queues = QueueConfig.DEAD_LETTER_QUEUE)
public void received(Message message, Channel channel){
// 获取到相关的消息
String msg = new String(message.getBody());
System.out.println("msg = " + msg);
}
}
启动项目
浏览器输入以下url
控制台会相应打印出