SpringBoot整合RabbitMQ生产者
1.生产者整合RabbitMQ的基本配置
1.1:引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1.2:配置文件
spring:
rabbitmq:
host: 192.168.1.199
port: 5672
username: root
password: 123456
virtual-host: /
publisher-confirm-type: correlated
publisher-returns: true
template:
mandatory: true
retry:
enabled: false
initial-interval: 1000
max-attempts: 3
max-interval: 10000
multiplier: 1
connection-timeout: 1000
1.3:配置类(两个)
@Configuration
public class RabbitConfig {
@Bean
public DirectExchange directExchange() {
return new DirectExchange("shanguoyu", false, false, null);
}
@Bean
public DirectExchange sixinExchange() {
return new DirectExchange("shanguoyu-sixin", false, false, null);
}
@Bean
public Queue sixinQueue() {
return new Queue("shanguoyu-queue", false, false, false);
}
@Bean
public Binding binding(Queue sixinQueue, DirectExchange sixinExchange) {
Binding binding = BindingBuilder.bind(sixinQueue).to(sixinExchange).with("shanguoyu");
return binding;
}
@Bean
public Queue directQueue() {
HashMap<String, Object> stringHashMap = new HashMap<>();
stringHashMap.put("x-dead-letter-exchange", "shanguoyu-sixin");
stringHashMap.put("x-dead-letter-routing-key", "shanguoyu");
return new Queue("shanguoyu", false, false, false, stringHashMap);
}
@Bean
public Binding directBinding(Queue directQueue, DirectExchange directExchange) {
Binding binding = BindingBuilder.bind(directQueue).to(directExchange).with("shanguoyu");
return binding;
}
}
-------------------------------------------------------------
@Configuration
public class RabbitTemplateConfig {
RabbitTemplate rabbitTemplate;
@Primary
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
this.rabbitTemplate = rabbitTemplate;
initRabbitTemplale();
return rabbitTemplate;
}
private void initRabbitTemplale() {
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
if (ack) {
System.out.println("已发送到交换器!");
} else {
System.out.println("出现了异常!(考虑重发)");
System.out.println("原因是:" + cause);
}
});
rabbitTemplate.setReturnCallback((message, replyCode, replyText, exchange, routingKey) -> {
System.out.println("失败通知:消息不可路由!");
System.out.println("消息是:" + new String(message.getBody()));
System.out.println("交换器是::" + exchange);
System.out.println("路由键是:" + routingKey);
System.out.println("状态码:" + replyCode);
System.out.println("错误原因:" + replyText);
});
}
}
2.发送消息
2.1:send方法
@Resource
private RabbitTemplate rabbitTemplate;
public void sendMsg(String msg){
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
Message message = new Message("shanguoyu".getBytes(), MessagePropertiesBuilder.newInstance().build());
rabbitTemplate.send("shanguoyu", "shanguoyu",message,correlationData);
}
2.2:convertAndSend方法
@Resource
private RabbitTemplate rabbitTemplate;
public void sendMsg(String msg){
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend("shanguoyu","shanguoyu","msg".getBytes(),msg->{
return msg;
},correlationData);
}