RabbitMQ浅习

安装

使用docker安装,这里management是指定了具有管理界面(Management Interface)的版本,目前最新是3.11

docker pull rabbitmq:management

下载完镜像后可以查看一下

docker images

镜像列表出现rabbitmq

 运行容器,不设置密码(默认guest),5672 用于AMQP (Advanced Message Queuing Protocol) 连接, 15672 用于管理界面(Management Interface),--hostname是设置的容器的主机名称,可以选择不加这个参数;--name是docker容器名称

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq:management

查看一下现有容器

docker ps -a

容器列表出现rabbit

 访问宿主机的15672端口,能看到管理界面(如果用服务器,别忘了开安全组)

用户名和密码都是guest,登录进去就是这个界面

 SpringBoot整合

 需要新建两个springboot项目,一个用于生产者,一个用于消费者,均基于maven创建

 在生产者rabbitmq-provider工程的pom.xml中,引入依赖:

        <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>

配置application.yml,只要没有折腾过,virtual host就是/,至于怎么折腾可以去管理界面的admin里,笔者不做赘述

server:
  port: 8021
spring:
  #应用名字,当然也未必和文件夹名称一样
  application:
    name: rabbitmq-provider
  #配置rabbitMq 服务器
  rabbitmq:
    host: xx.xx.xx.xx # 服务器ip
    port: 5672 # 服务端口
    username: guest #默认账号密码
    password: guest
    #虚拟host 一般情况下没有动过那个管理界面就没有virtual host,默认就是/
    virtual-host: /

 消费者工程的依赖:

        <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>

application.yml:换汤不换药

server:
  port: 8022
spring:
  application:
    name: rabbitmq-consumer
  #配置rabbitMq 服务器
  rabbitmq:
    host: 服务器ip
    port: 5672
    username: guest
    password: guest
    #虚拟host 可以不设置,使用server默认host
    virtual-host: /

以直连方式为例:在rabbitmq-provider工程中新建配置类:

durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在
autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除

为了防止出现故障(断电等)导致消息丢失,一般要设置持久化

@Configuration
public class DirectRabbitConfig {

    //队列
    @Bean
    public Queue TestDirectQueue() {
        return new Queue("TestDirectQueue",true); // durable为true
    }

    //Direct交换机
    @Bean
    DirectExchange TestDirectExchange() {
        return new DirectExchange("TestDirectExchange",true,false);
    }

    //绑定  将队列和交换机绑定, 并设置用于匹配的路由键:TestDirectRouting
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("TestDirectRouting");
    }

    @Bean
    DirectExchange lonelyDirectExchange() {
        return new DirectExchange("lonelyDirectExchange");
    }
    
}

创建一个controller,写一个发消息的接口(当然业务逻辑里未必是直接暴露接口进行调用,这里方便测试)

@RestController
public class MessageController {

    @Autowired
    RabbitTemplate rabbitTemplate; // 这里idea可能爆红,问题不大

    @GetMapping("/sendDirectMessage")
    public String sendDirectMessage() {
        String messageId = String.valueOf(UUID.randomUUID());
        String messageData = "test message, hello!";
        String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        Map<String,Object> map=new HashMap<>();
        map.put("messageId",messageId);
        map.put("messageData",messageData);
        map.put("createTime",createTime);
        //将消息携带绑定键值:TestDirectRouting 发送到交换机TestDirectExchange
        rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", map);
        return "ok";
    }

}

在rabbitmq-consumer工程中创建监听类:

@Component
@RabbitListener(queues = "TestDirectQueue")//监听的队列名称 TestDirectQueue
public class DirectReceiver {

    @RabbitHandler
    public void process(Map testMessage) {
        System.out.println("DirectReceiver消费者收到消息  : " + testMessage.toString());
    }

}

先启动provider,然后用postman调用一下http://localhost:8021/sendDirectMessage接口(用浏览器也行,whatever),然后等一下,再启动consumer(不知道是什么问题,如果是直接启动两个工程,可能consumer会说找不到队列),然后可以发现consumer能够接收到这条消息了

感谢教程Springboot 整合RabbitMq ,用心看完这一篇就够了_springboot rabbitmq_小目标青年的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值