springboot整合rabbitMQ

252 阅读2分钟

springboot整合rabbitMQ--存储和读取队列

生产方

1.引入依赖

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

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.amqp</groupId>
        <artifactId>spring-rabbit-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2.在配置在件中添加rabbit服务的信息

#rabbitmq的配置
#rabbit服务的IP地址
spring.rabbitmq.host=192.168.94.131
#rabbit服务的管理员账号密码
spring.rabbitmq.username=cjj
spring.rabbitmq.password=cjj
#rabbit服务的虚拟主机
spring.rabbitmq.virtual-host=/cjj

3.调用RabbitTemplate中发送消息的方法。

@SpringBootTest
class SpringbootRabbitmqApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;


    @Test
    void contextLoads() {

        rabbitTemplate.convertAndSend("topics_exchange","three.one","springboot整合了rabbitMQ");

    }

}

4.生产方传送对象

需要json和对象互转的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

代码

@SpringBootTest
class SpringbootRabbitmqApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    @Test
    void contextLoads() {

        final HashMap<String, Object> mp = new HashMap<>();
        mp.put("name","cjj");
        mp.put("age","23");
        final String string = JSON.toJSONString(mp);
        rabbitTemplate.convertAndSend("topics_exchange","three.one",string);
    }

}

消费方

1.依赖

与生产方相同

2.配置

与生产方相同

3.创建类---创建监听方法即可@RabbitListener

//交予spring容器管理
@Component
public class MyListener {

    //queues监听的队列名
    //监听topics_queue02队列,如果要监听多个,则需要使用,隔开
    @RabbitListener(queues = {"topics-queues002"})
    public void topics(Message message){
        //把监听到的消息封装到message类对象中
        final byte[] body = message.getBody();
        String s = new String(body);
        System.out.println("消息的内容是"+s);
    }
}

4.接收对象类型

需要json和对象互转的依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>

代码

//交予spring容器管理
@Component
public class MyListener {

    //queues监听的队列名
    //监听topics_queue02队列,如果要监听多个,则需要使用,隔开
    @RabbitListener(queues = {"topics-queues002"})
    public void topics(Message message){
        //把监听到的消息封装到message类对象中
        final byte[] body = message.getBody();
        String s = new String(body);
        final JSONObject jsonObject = JSON.parseObject(s);
        System.out.println("消息的内容是"+jsonObject);
    }
}

springboot整合rabbitMQ--创建交换机和队列

定义一个配置类

@Configuration
public class RabbitConfig {

    //定义交换机名称
    public static final String EXCHANGE_NAME="topic_exchange003";

//创建交换机
    @Bean
    public Exchange exchange(){
        final Exchange build = ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();

        return build;
    }
//创建队列
    @Bean
    public Queue queue(){
        final Queue topic_queue003 = QueueBuilder.durable("topic_queue003").build();
        return topic_queue003;
    }
//绑定队列和交换机
    @Bean
    public Binding binding(){
        final Binding noargs = BindingBuilder.bind(queue()).to(exchange()).with("cjj.#").noargs();
        return noargs;
        //如果交换机要绑定多个队列,需要再写一个bind方法
    }
}