初学RabbitMQ(一),使用SpringBoot进行简单的整合,初识直连交换机。

安装RabbitMQ

由于RabbitMQ是基于erlang开发出来的,所以需要安装ErLang环境,再安装RabbitMQ。
附上安装教程链接~

RabbitMQ的流程逻辑

安装成功后,即可访问http://localhost:15672/,MQ的服务端。
在这里插入图片描述
这个页面中,Exchange标签对应的是交换机、Queue标签对应的是队列 。消费者是从队列中获取消息,而队列是和交换机进行绑定的,可以看如下流程图。

在这里插入图片描述

在RabbitMQ中有七个默认的交换机,常用的交换机有直连交换机(DirectExchange)、扇形交换机(FanoutExchange)、主题交换机(TopicExchange),本节主要记录一下直连交换机的用法,下节再讲扇形交换机与主题交换机。


直连交换机(DirectExchange)

直连交换机与队列进行绑定时,也同时绑定了个路由值(X),若有消息载体,携带了路由值(X)到交换机中,交换机就会通过X去寻找对应的队列。

开始编码

生产者代码与消费者代码可以放到一个项目中,也可以分开使用不同的项目进行存放。为方便学习,新建两个项目mqproducer以及mqcustomer。


先开始编写生产者代码mqproducer

pom文件依赖如下:

<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.properties文件如下:

##项目名
spring.application.name = MqProducer

##配置rabbitmq
spring.rabbitmq.host = localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

##端口号
server.port=8961

接下来使用直连交换机,并将队列和交换机进行绑定。可以直接绑定MQ上的交换机,也可以自定义交换机进行绑定。

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ProducerConfig {
    @Bean
    Queue topicQueue(){
	   /**
         * 四个参数
         * 1.name:对应的是队列的名称
         * 2.durable:对应的是队列是否持久化
         * 3.exclusive:若设置为true,那么该队列只能被当前连接使用,连接关闭则队列删除。 优先级高于durable
         * 4.autoDelete:对应的是是否自动删除队列(没有生产者或消费者使用此队列,则此队列自动删除)
         */
        return new Queue("topicQueue",true);
    }

    @Bean
    Binding bindingExchange(){
        return BindingBuilder.bind(topicQueue()).to(new TopicExchange("amq.topic")).with("topic.*");
    }

}

配置完毕后,启动项目就会新增队列,并和交换机进行绑定
在这里插入图片描述
在这里插入图片描述

接下来写一个简单的消息发送接口,按业务需求进行开发。

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/mq")
public class ProducerAction {
    @Autowired
    RabbitTemplate rabbitTemplate;
    @RequestMapping("/sending")
    public void sending(){
        try{
            String uuid = String.valueOf(UUID.randomUUID());
            String message = "This is a first message!";
            String date = new SimpleDateFormat("yyyy-MM-dd HH:mm").format(new Date());
            Map<String,Object> m = new HashMap<>();
            m.put("messageId", uuid);
            m.put("createTime",date);
            m.put("message",message);
            rabbitTemplate.convertAndSend("amq.topic","topic.man",m);
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

开发完成,启动项目后,访问接口,就可以发现现在有一条数据准备被消费。
在这里插入图片描述


生产者开发完成后,接下来新建消费者项目,开发消费者代码mqcustomer

pom文件依赖如下:

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

交换机与队列配置(在消费者中,该代码可以不用,只需要写底下的注解监听代码就可以了。但是加上了,会使得消费者也能生产消息。


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MqCustomerConfig {

    @Bean
    Queue directQueue(){
        return new Queue("directQueue",true);
    }

	@Bean
    Binding bindingExchange(){
        return BindingBuilder.bind(directQueue()).to(new DirectExchange("amq.direct")).with("directRouting");
    }

}

接下来就写一下监听消息的代码

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
@RabbitListener(queues = {"directQueue"})
public class MqCustomerListener {

    @RabbitHandler
    public void process(Map m){
        System.out.println("接受到的消息为:"+m.toString());
    }
}

RabbitListener注解是查看要监听哪个队列下再通过RabbitHandler注解处理数据
启动一下消费者项目,就会看到,消息已经被消费下来了
在这里插入图片描述
在这里插入图片描述
再访问一下生产者项目,发送一条消息。
消费者就实时消费了。

在这里插入图片描述

以上就是关于RabbitMQ在SpringBoot上简单的整合,并使用直连交换机生产消息与消费消息。
Spring Boot集成RabbitMQ可以通过以下步骤完成: 1. 添加Maven依赖:在pom.xml文件中添加RabbitMQSpring Boot Starter依赖。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 2. 配置RabbitMQ连接信息:在application.properties(或application.yml)文件中配置RabbitMQ的连接信息。 ```properties spring.rabbitmq.host=your_rabbitmq_host spring.rabbitmq.port=your_rabbitmq_port spring.rabbitmq.username=your_rabbitmq_username spring.rabbitmq.password=your_rabbitmq_password ``` 3. 创建RabbitMQ发送者:创建一个发送消息的类,使用`RabbitTemplate`发送消息到指定的交换机和队列。 ```java import org.springframework.amqp.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class RabbitMQSender { @Autowired private RabbitTemplate rabbitTemplate; public void sendMessage(String exchange, String routingKey, Object message) { rabbitTemplate.convertAndSend(exchange, routingKey, message); } } ``` 4. 创建RabbitMQ接收者:创建一个接收消息的类,使用`@RabbitListener`注解监听指定的队列,处理接收到的消息。 ```java import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; @Component public class RabbitMQReceiver { @RabbitListener(queues = "your_queue_name") public void receiveMessage(Object message) { // 处理接收到的消息 System.out.println("Received message: " + message.toString()); } } ``` 5. 发送和接收消息:在需要发送或接收消息的地方调用对应的方法。 ```java @Autowired private RabbitMQSender rabbitMQSender; public void sendMessage() { rabbitMQSender.sendMessage("your_exchange_name", "your_routing_key", "Hello, RabbitMQ!"); } ``` 以上是基本的使用方式,你可以根据实际需求进行扩展和配置。注意,你还需要安装并启动RabbitMQ服务。 希望对你有所帮助!如果有任何疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值