SpringBoot集成RabbitMQ

254 阅读1分钟

1.RabbitMQ在Windows上的环境搭建

1.1下载erlang

erlang下载地址,下载后双击.exe安装,安装完毕后配置环境变量;环境变量增加ERLANG_HOME,值为安装路径;环境变量Path中加入 %ERLANG_HOME%\bin;配置完后打开命令行,输入erl,如果出现erlang的版本信息就表示erlang语言环境安装成功。

1.2下载RabbitMQ

RabbitMQ下载地址,下载后同样双击.exe安装,安转完毕后在命令行CMD中,进入RabbitMQ安装目录的sbin(我的目录是:E:\tools\RabbitMQ\rabbitmq_server-3.8.2\sbin),输入:rabbitmq-plugins enable rabbitmq_management命令,稍等会会发现出现plugins安装成功的提示。
浏览器输入localhost:15672进入管理界面,账号密码默认为guest。

2.代码层面实现springboot集成RabbitMQ

2.1pom添加相关依赖

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

2.2RabbitMQ相关配置

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

#自定义的一些配置
blog:
  exchange:
    fanout: my.exchange.fanout
    direct: my.exchange.direct
    topic: my.exchange.topic
  email:
    queue: email

2.3生产者相关demo

@Component
public class Producer {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    //定义交换机名
    @Value("${blog.exchange.direct}")
    private String exchangeName;

    //定义routingKey(fanout模式没有路由key)
    @Value("${blog.routingKey}")
    private String routingKey;

    public void sendMessage() {
        try {
            String msg = "您的博客信息是:" + UUID.randomUUID().toString() + new Date();
            rabbitTemplate.convertAndSend(exchangeName, routingKey, msg);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

RabbitTemplate类会自动读取配置文件连接上MQ不需要额外代码。

2.4消费者相关demo(以direct模式举例)

@Component
/**
 * 1.会把申请的队列和交换机进行绑定
 * 2.确定消息的模式 fanout direct topic
 * 3.确定queue的持久性 autoDelete = "false" ,代表持久化(存盘),若为"true" ,rabbitmq挂了后队列会删除
 */
@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${blog.email.queue}", autoDelete = "false"),
        exchange = @Exchange(value = "${blog.exchange.direct}", type = ExchangeTypes.DIRECT), key = "${blog.routingKey}"))
public class EmailServer {
    @RabbitHandler
    public void sendMessage(String msg) {
        System.out.println("Email消息:" + msg);
    }
}

2.5测试

@SpringBootTest
class CommunityCoreApplicationTests {
    @Autowired
    private Producer producer;

    @Test
    void contextLoads() {
        producer.sendMessage();
    }
}