Springboot整合RabbitMQ

1、创建Springboot项目、导入依赖

 
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            org.springframework.boot
            spring-boot-starter-amqp
        
        
            org.apache.commons
            commons-lang3
        
        
        
            com.alibaba
            fastjson
            1.2.49
        
 
        
            org.projectlombok
            lombok
        
    

2、配置文件中添加rabbitmq的连接信息

spring:
  rabbitmq:
    #连接地址
    host: 127.0.0.1
    #端口号
    port: 5672
    #账号
    username: guest
    #密码
    password: guest
    #虚拟主机
    virtual-host: /rkVirtualHost
server:
  port: 8080
 

3、编写rabbitmq的配置类

package com.rk.config;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
 
/**
 * @author :Rk.
 * @date : 2022/10/8
 * 定义完成后 rabbitmq服务器会自动创建交换机和队列 以及绑定关系
 */
@Configuration
public class RabbitMQConfig {
 
 
    /**
     * 定义交换机名称
     */
    private String EXCHANGE_NAME="springboot_falout_exchange";
 
    /**
     * 短信队列
     */
    private String FANOUT_SMS_QUEUE = "fanout_sms_queuerk";
 
    /**
     * 邮件队列
     */
    private String FANOUT_EMAIL_QUEUE = "fanout_email_queuerk";
 
 
    /**
     * 定义 扇形交换机
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        //参数 交换机名称
        return new FanoutExchange(EXCHANGE_NAME);
    }
 
    /**
     *参数一:队列名称
     *参数二durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
     *参数三exclusive:默认也是false,是否独占队列
     *参数四autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
     */
    @Bean
    public Queue smsQueue(){
        return new Queue(FANOUT_SMS_QUEUE,true, false,false);
    }
 
    /**
     *参数一:队列名称
     *参数二:durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
     *参数三:exclusive:默认也是false,是否独占队列
     *参数四:autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
     */
    @Bean
    public Queue emailQueue(){
        return new Queue(FANOUT_EMAIL_QUEUE,true,false,false);
    }
 
    /**
     * 短信队列绑定交换机
     * @param smsQueue   短信队列注入到容器的id,也就是方法名 sumQueue
     * @param fanoutExchange   交换机注入到容器的id,也就是方法名 fanoutExchange
     * @return
     */
    @Bean
    public Binding bindingSmsFanoutExchange(Queue smsQueue,FanoutExchange fanoutExchange){
        return  BindingBuilder.bind(smsQueue).to(fanoutExchange);
    }
 
    /**
     * 邮件队列队列绑定交换机
     * @param emailQueue   短信队列注入到容器的id,也就是方法名 emailQueue
     * @param fanoutExchange   交换机注入到容器的id,也就是方法名 fanoutExchange
     * @return
     */
    @Bean
    public Binding bindingEmailFanoutExchange(Queue emailQueue,FanoutExchange fanoutExchange){
        return  BindingBuilder.bind(emailQueue).to(fanoutExchange);
    }
 
}

这里使用的是扇形交换机,交换机会把消息路由到绑定到它的所有队列。
在Spring启动时,利用Spring Bean管理工厂BeanFactory接口,实现动态创建交换机、队列、交换机和队列的绑定关系,让我们无需进行重复的编码工作。

你可能感兴趣的:(消息中间件,spring,boot,rabbitmq)