springBoot+RabbitMQ简单例子

本文介绍如何在Spring Boot项目中集成RabbitMQ消息队列服务,包括配置依赖、设置连接参数、创建消息发送与接收类等步骤,并提供一个简单的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了一下微服务的RabbitMQ 消息处理, 就写了一个例子,记录踩的坑 RabbitMQ安装就不介绍了,之前服务器安装过,

新建一个Spring Boot工程,命名为:“rabbitmq-hello”。
在pom.xml中引入如下依赖内容,其中spring-boot-starter-amqp用于支持RabbitMQ。
因为我建项目直接是官网建的,RabbitMQ依赖直接加上就OK,下载ZIP解压后导入工程,IDE里建也是一样。
直接上代码了,pom.xml依赖文件里 加入amqp依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>SpringBootRabbitMQ</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>demo</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

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

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>

在application.properties中配置关于RabbitMQ的连接和用户信息,用户可以回到上面的安装内容,在管理页面中创建用户。
spring.rabbitmq.host=192.168.11.12
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
安装rabbitmq的时候,这些消息写上
然后就是开始写类 一共五个类,一个springboot启动类,一个测试类,一个发送类,一个接收者类,一个配置消息类,
启动类
@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMqHelloTest {

@Autowired
private Sender senders;

@Test
public void hello() throws Exception {
senders.send();
}
}

创建消息生产者Sender。通过注入AmqpTemplate接口的实例来实现消息的发送,AmqpTemplate接口定义了一套针对AMQP协议的基础操作。在Spring Boot中会根据配置来注入其具体实现。在该生产者,我们会产生一个字符串,并发送到名为hello_lmctest的队列中。
消息发送类,之前注入一直不成功,后台报空值,@Component这个之前没加上,注入类型这个是必须项,找了好一会儿原因
//消息发送者
@Component
public class Sender {

@Autowired
private AmqpTemplate amqpTemplate;
public void send(){
String context = "hello world lmc " + new Date();
System.out.println("Sender : " + context);
this.amqpTemplate.convertAndSend("hello_lmctest",context);
}
}

然后是消息接收类了,也很简单,之前测试的时候,发送消息时,队列名称没写,直接发送消息,无法接收请求,都是太大意了, 其实都简单
创建消息消费者Receiver。通过@RabbitListener注解定义该类对hello队列的监听,并用@RabbitHandler注解来指定对消息的处理方法。所以,该消费者实现了对hello队列的消费,消费操作为输出消息的字符串内容。
//消息接收者
@Component
@RabbitListener(queues="hello_lmctest")
public class HelloReceiver {

@RabbitHandler
public void process(String str){
System.out.println("Receiver "+str);
}
}

创建RabbitMQ的配置类RabbitConfig,用来配置队列、交换器、路由等高级信息。这里我们以入门为主,先以最小化的配置来定义,以完成一个基本的生产和消费过程。
配置类比较简单,生成一个队列,这个队列就是发送者和接收者都 需要对应的,监听队列
@Configuration
public class RabbitConfig {

@Bean
public Queue helloQueue(){
return new Queue("hello_lmctest");
}
}

最后在 RabbitMQ 服务器端可以 访问RabbitMQ UI界面,查得到queues 创建的hello_lmctest队列名

启动应用主类,从控制台中,我们看到如下内容,程序创建了一个访问127.0.0.1:5672中springcloud的连接。
[cTaskExecutor-1] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#7b94089b:0/SimpleConnection@2145fe53
消息没有复制全,后面跟关IP 还有一些信息

再运行单元测试类,我们可以看到控制台中输出下面的内容,消息被发送到了RabbitMQ Server的hello_lmctest队列中。

Sender : hello world lmc Thu May 24 14:04:49 CST 2018

切换到应用主类的控制台,我们可以看到类似如下输出,消费者对hello_lmctest队列的监听程序执行了,并输出了接受到的消息信息。
Receiver hello world lmc Thu May 24 14:04:49 CST 2018

这是简单应用,然而在实际应用中,我们还有很多内容没有演示 有交换机,路由健,模板等更高级的使用方式,有时间再研究


测试发送对象消息的时候,对实体类必须 序列化,实现public class User implements Serializable 接口
@Test
public void hello() throws Exception {
//消息发送对象类型,一定要序列化才行
User user=new User();
user.setId("1243");
user.setName("lmc");
System.out.println("user");
for(int i=0;i<6;i++){
senderobj.send(user);
}
}
以下是一个基于Spring Boot和RabbitMQ集群的完整示例: 1. 首先,需要在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> ``` 2. 然后,在application.yml文件中添加以下RabbitMQ配置: ``` spring: rabbitmq: addresses: server1:5672,server2:5672 # RabbitMQ集群地址 username: guest # RabbitMQ用户名 password: guest # RabbitMQ密码 virtual-host: / # RabbitMQ虚拟主机 ``` 3. 创建一个RabbitMQ配置类,如下所示: ``` @Configuration public class RabbitMQConfig { @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setAddresses("server1:5672,server2:5672"); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); connectionFactory.setVirtualHost("/"); return connectionFactory; } @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory()); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } } ``` 4. 创建一个消息发送端,如下所示: ``` @Component public class MessageSender { @Autowired private RabbitTemplate rabbitTemplate; public void send(String message) { rabbitTemplate.convertAndSend("exchange", "routingKey", message); } } ``` 5. 创建一个消息接收端,如下所示: ``` @Component public class MessageReceiver { @RabbitListener(queues = "queue") public void receive(String message) { System.out.println("Received message: " + message); } } ``` 6. 最后,启动多个应用程序实例,并尝试发送和接收消息,以测试RabbitMQ集群是否正常工作。 注意:本示例中的exchange、routingKey和queue名称可以根据实际情况进行更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值