欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

消息队列RabbitMQ的入门使用

程序员文章站 2024-03-13 12:02:09
...

简单介绍消息队列

关于消息队列,学过数据结构都知道队列,而它则是基于队列实现的一个消息中间件。消息队列主要的作用是应用解耦,异步处理,流量削峰。按我的理解简单来说消息队列主要面向生产者消费者,其中生产者只需要关注于将信息投递给消息队列,并不知道是哪个消费者或者何时进行消费,而消费者只需要关注于消息队列,从中取出消息进行消费。

RabbitMQ的简单使用

RabbitMQ是实现AMQP协议并基于erlang语言进行开发的一个开源消息队列,其中rabbitmq实现的AMQP 0-9-1模型如下图

 

消息队列RabbitMQ的入门使用

图来源:http://rabbitmq.mr-ping.com

生产者将消息发布给broker,也就是RabbitMQ,进入交托给Exchange(交换机),(其中有4种模式,分别是Direct,Fanout,Topic,Header,这里不详细解释了),如果是非广播模式则需要Routing key,根据routing key转发到绑定了这个Exchange并符合routing key的queue中,就是路由转发的意思。

安装

windows平台的安装:

因为RabbitMQ是基于erlang开发,所以需要配好erlang语言的环境,不然启动rabbitmq会提示需要erlang语言环境。

下载安装erlang,以管理员身份运行,然后一直next即可  http://www.erlang.org/downloads

 

接下来下载rabbitmq ,需要看清楚描述选择和你安装的erlang版本适配的rabbitmq版本下载

https://www.rabbitmq.com/download.html

rabbitmq提供了一个后台管理的页面,第一次使用需要配置下,进入rabbitmq的sbin目录打开命令行执行下面的命令

rabbitmq-plugins enable rabbitmq_management

成功则用浏览器访问localhost:15672,默认用户:guest  默认密码:guest,进去可以自己创建用户

消息队列RabbitMQ的入门使用

使用

接下来简单写个rabbitmq的小demo,用的是SpringBoot

首先是引用相关的依赖

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

然后就是关于创建队列,有两种方式,分别是动态映射,静态创建,前者是在项目中根据提供接口进行创建和配置参数,每次项目运行时会判断rabbitmq中对应的队列是否存在或者是否需要改变进行修改,后者则是在管理页面进行创建配置,个人推荐第一种,就不需要每换了一个环境就要重新配置。

需要配置yml参数详细 https://blog.csdn.net/en_joker/article/details/80103519

需要创建exchange,durable是指是否持久化,否则重启rabbitmq,队列和其消息就会丢失

 @Bean("deadLetterExchange")
    public Exchange directExchange() {
        return ExchangeBuilder.directExchange("DEADLETTER_EXCHANGE").durable(true).build();
    }

创建队列

 @Bean("redirectQueue")
    public Queue directQueue1() {
        return QueueBuilder.durable("REDIRECT_QUEUE").build();
    }

exchange与queue进行绑定

 @Bean
    public Binding directBinding1(@Qualifier("redirectQueue") Queue queue, @Qualifier("deadLetterExchange") Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("REDIRECT_QUEUE_KEY").noargs();
    }

简单配置完毕启动项目,可在rabbitmq管理页面看到已创建

消息队列RabbitMQ的入门使用

消息队列RabbitMQ的入门使用

生产者发布消息 args为消息

rabbitTemplate.convertAndSend("DEADLETTER_EXCHANGE", "REDIRECT_QUEUE_KEY", args, messagePostProcessor);

配置消费者,只需在方法上配置@RabbitListener(queues = "REDIRECT_QUEUE")

   @RabbitListener(queues = "REDIRECT_QUEUE")
    public void on(Message message, Channel channel) throws IOException {
        channel.basicAck(message.getMessageProperties().getDeliveryTag(),true );
        System.out.println("消费者消费信息:"+new String(message.getBody()));
    }

但是这样配置的话只是单线程的消费者,如果想多线程消费需要配置以下工厂消费者类。

接下测试一下,成功消费。

消息队列RabbitMQ的入门使用

rabbitmq还提供确认机制,使得其过程更加可靠,确保消息的一致性。

 

相关标签: rabbitmq SpringBoot