第一步,先搞一手儿依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第二步,在配置文件中进行配置
#使用本机的rabbitmq进行集成springboot的测试
spring.application.name=SpringBootRabbitMQ
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/graduation_info
#rabbitmq配置参数
rabbitmq.exchange=springBoot_exchange
rabbitmq.queue=springBoot_queue
rabbitmq.routingkey=key_direct
#rabbitmq消息确认
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
第三步,配置一个rabbitmq的config配置类
@Configuration
public class RabbitConfig {
@Value("${rabbitmq.queue}")
public String QUEUE_NAME;
@Value("${rabbitmq.exchange}")
public String EXCHANGE_NAME;
@Value("${rabbitmq.routingkey}")
public String ROUTING_KEY;
// 创建queue
@Bean
public Queue queue() {;
Map<String, Object> configMap = new HashMap<>();
configMap.put("exchange", EXCHANGE_NAME);
configMap.put("routing-key", ROUTING_KEY);
configMap.put("x-message-ttl", 10000);
return new Queue(QUEUE_NAME, true, false, false, configMap);
}
// 创建exchange
@Bean
public DirectExchange exchange() {
return new DirectExchange(EXCHANGE_NAME, true, false);
}
// 创建routing_key
@Bean
public Binding binding() {
return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY);
}
}
第四步,搞个发送类
@Component
@Slf4j
public class RabbitMqSend implements RabbitTemplate.ConfirmCallback{
private RabbitTemplate rabbitTemplate;
@Autowired
RabbitConfig rabbitConfig;
private RabbitAdmin rabbitAdmin;
@Autowired
public RabbitMqSend(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
rabbitTemplate.setConfirmCallback(this);
}
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (!ack) {
log.error("Sending RabbitMQ Object ERROR" );
}else {
log.info("发送成功");
}
}
/*从这里头实现发送出rabbitmq的消息*/
public void sendMessage(final String message) throws IllegalArgumentException {
log.info("send message");
rabbitTemplate.send(rabbitConfig.EXCHANGE_NAME, rabbitConfig.ROUTING_KEY, buildMessage(message.getBytes()));
}
public static Message buildMessage(byte[] value) {
return MessageBuilder.withBody(value)
.setMessageId(
"collection-recsync-" + UUID.randomUUID().toString())
.build();
}
}
第五步,再来个消费者listener监听消费爽一把
@Slf4j
@Component
public class RabbitListenerDemo {
@RabbitListener(queues="springBoot_queue")
public void receive(Message msg){
log.info("收到消息为:"+new String(msg.getBody()));
}
}
然后自己写个controller发个请求,最后控制台会打印出来发送和接收的消息就OK了
2019-05-13 16:29:24.748 INFO 69008 --- [nio-8080-exec-1] c.u.springboot.rabbitmq.RabbitMQManager : send message
2019-05-13 16:29:24.760 INFO 69008 --- [cTaskExecutor-1] c.u.s.rabbitmq.RabbitListenerDemo : 收到消息为:"测试"
2019-05-13 16:29:24.790 INFO 69008 --- [ 127.0.0.1:5672] c.u.springboot.rabbitmq.RabbitMQManager : 发送成功
搞了半天才搞明白个基础的,有问题欢迎一起讨论,最后曼城是冠军,英超卫冕,瓜丢啦牛逼