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