SpringBoot 快速集成RabbitMQ
1.添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2.配置application.yml
spring:
rabbitmq:
username: guest
password: guest
virtual-host: /
publisher-confirms: true
addresses: localhost:5672
server:
port: 8282
3.配置RabbitMQ
/**
* 配置RabbitMQ
* @author 陈梓平
* @date 2017/10/25.
*/
@Configuration
public class RabbitMQConfig {
public static final String CHEN_EXCHANGE = "callback.exchange.CEHN";
public static final String CHEN_ROUTINGKEY = "callback.routingkey.CEHN";
@Value("${spring.rabbitmq.addresses}")
private String addresses;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Value("${spring.rabbitmq.virtual-host}")
private String virtualHost;
@Value("${spring.rabbitmq.publisher-confirms}")
private boolean publisherConfirms;
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setAddresses(addresses);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
/** 如果要进行消息回调,则这里必须要设置为true */
connectionFactory.setPublisherConfirms(publisherConfirms);
return connectionFactory;
}
@Bean
/** 因为要设置回调类,所以应是prototype类型,如果是singleton类型,则回调类为最后一次设置 */
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate() {
RabbitTemplate template = new RabbitTemplate(connectionFactory());
return template;
}
}
4.配置发布者
/**
* 发布者
* @author 陈梓平
* @date 2017/10/25.
*/
@Component
public class Sender implements RabbitTemplate.ConfirmCallback{
private static final Logger log = LoggerFactory.getLogger(Sender.class);
private RabbitTemplate rabbitTemplate;
@Autowired
public Sender(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
this.rabbitTemplate.setConfirmCallback(this);
}
/**
* 发送消息
* @param content
*/
public void sendMsg(String content) {
CorrelationData correlationId = new CorrelationData(UUID.randomUUID().toString());
rabbitTemplate.convertAndSend(RabbitMQConfig.CHEN_EXCHANGE, RabbitMQConfig.CHEN_ROUTINGKEY,
content, correlationId);
// rabbitTemplate.convertAndSend("CEHN",content);
}
/**
* 发布消息后进行回调
* @param correlationData
* @param ack
* @param cause
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
log.info(" 回调id:" + correlationData);
if (ack) {
log.info("消息成功消费");
} else {
log.info("消息消费失败:" + cause);
}
}
}
5.配置消息监听
/**
* 消息监听者
* @author 陈梓平
* @date 2017/10/25.
*/
@Configuration
@RabbitListener(queues = RabbitMQConfig.CHEN_EXCHANGE)
public class Listener {
private static final Logger log = LoggerFactory.getLogger(Listener.class);
/** 设置交换机类型 */
@Bean
public DirectExchange defaultExchange() {
/**
* DirectExchange:按照routingkey分发到指定队列
* TopicExchange:多关键字匹配
* FanoutExchange: 将消息分发到所有的绑定队列,无routingkey的概念
* HeadersExchange :通过添加属性key-value匹配
*/
return new DirectExchange(RabbitMQConfig.CHEN_EXCHANGE);
}
@Bean
public Binding binding() {
/** 将队列绑定到交换机 */
return BindingBuilder.bind(fooQueue()).to(defaultExchange()).with(RabbitMQConfig.CHEN_ROUTINGKEY);
}
@Bean
public Queue fooQueue() {
return new Queue(RabbitMQConfig.CHEN_EXCHANGE);
}
@RabbitHandler
public void process(@Payload String CHEN) {
log.info("Listener: " + CHEN);
}
}
6.测试
6.1 测试接口
/**
* 测试Rabbitmq
* @author 陈梓平
* @date 2017/10/25.
*/
@RestController
@RequestMapping
public class RabbitmqController {
@Autowired
private Sender sender;
@GetMapping("/send")
public String send( String msg) {
sender.sendMsg(msg);
return "Send OK.";
}
}
6.2查看是否成功连接Rabbitmq
6.3浏览器访问
http://localhost:8282/send?msg=%E6%B5%8B%E8%AF%95Rabbitmq