您的位置:首页 > 编程语言 > Java开发

Spring Boot -- 整合RabbitMQ消息队列

2019-05-13 23:42 555 查看

1.引入RabbitMQ的依赖:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.在application.yml配置RabbitMQ:

spring:
rabbitmq:
addresses: localhost
username: guest
password: guest
port: 5672

3.我们在测试类里开始使用springboot提供给我们的模板RabbitTemplate

@Autowired
RabbitTemplate rabbitTemplate;

4.使用rabbitTemplate:

1) rabbitTemplate.send(exchange,routekey,message);

这个方法需要我们自己定义message,定义消息体内容和消息头

2) rabbitTemplate.convertAndSend(exchange,routekey,object);

这个方法object默认被当成消息体,我们只需要传入发送的对象,便会自动序列化给rabbitMQ

exchange是交换机的名称,下面指定了一个点对点交换机exchange.direct作为示例,当然广播模式也一样,可以不用指定路由键广播即可

routekey是路由键名称,指明发送给哪个队列,示例发送给id0304.news队列

Map<String , Object> maps = new HashMap<String,Object>();
maps.put("msg","这是第一个消息");
maps.put("data", Arrays.asList("helloworld",123,true));
rabbitTemplate.convertAndSend("exchange.direct","id0304.news",maps);//运行测试类,再查看rabbitMQ队列里的数据

结果收到一串序列,说明以及成功加入队列.当然我们可以自己改成json类型,需要我们自己配置RabbitMQ,这里我们创建一个配置类MyMQConfig.java:

package com.id0304.amqp.config;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyMQConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}


可以看到这回是json数据类型存放再队列里了,当然取出数据时,也是正常的.

3) rabbitTemplate.receiveAndConvert(queueName);

这个方法可以用于接收队列,需要传入队列名称,然后返回一个Object对象.

Object o = rabbitTemplate.receiveAndConvert("id0304.news");
System.out.println(o.getClass());
System.out.println(o);

打印结果:

可见已经得到一个map集合,模板会自动识别类型,取出了这个序列之后,会发现rabbitMQ里这段数据已经为空.

5.使用springboot注解开发RabbitMQ

1) 开启基于注解的RabbitMQ模式:

package com.id0304.amqp;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableRabbit
@SpringBootApplication
public class Springboot02AmqpApplication {

public static void main(String[] args) {
SpringApplication.run(Springboot02AmqpApplication.class, args);
}

}

2) 配置监听,在要使用MQ的方法上加@RabbitListener(queues = “id0304.news”)注解即可.我们先在id0304.news这个队列存入一个Book对象.

package com.id0304.amqp.service;

import com.id0304.amqp.pojo.Book;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
public class BookService {
@RabbitListener(queues = "id0304.news")
public void recieve(Book book){
System.out.println(book);
}
}

运行主方法,这样这个方法就取出了刚刚存在队列id0304.news中的book对象并执行方法体.

当然,我们也可以获取消息体和消息头,传入的参数改为Message就可以获取整个消息

@RabbitListener(queues = "atguigu.news")
public void recieve2(Message message){
System.out.println("消息头:"+message.getMessageProperties());
System.out.println("消息体:"+message.getBody());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: