Springboot RabbitMq 整合使用 队列
Springboot RabbitMq整合使用 简单队列
本项目主要有两个服务,分别是是consumer和producer。
consumer服务
全部依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.谷歌.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
server:
port: 8081
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest #用户名
password: guest #密码
virtual-host:
实体
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
// 名字
private String name;
// 年龄
private Integer age;
// 性别
private String sex;
}
接收者
import com.alibaba.fastjson.JSON;
import com.lideru.consumer.pojo.User;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
@RabbitListener(queues = "HelloWorld")
public class HelloWorldReceiver {
@RabbitHandler
public void process(String user ) {
System.out.println( new Date() " 接收 : " user );
}
}
配置类
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitHelloWorldConfig {
/**
* Queue 可以有4个参数
* 1.name 队列名
* 2.durable 持久化消息队列 ,rabbitmq重启的时候不需要创建新的队列 默认true
* 3.auto-delete 表示消息队列没有在使用时将被自动删除 默认是false
* 4.exclusive 表示该消息队列是否只在当前connection生效,默认是false
*/
@Bean
public Queue createHelloWorldQueue() {
return new Queue("HelloWorld",true);
}
}
producer服务
全部依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.谷歌.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.37</version>
</dependency>
配置文件
server:
port: 8080
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest #用户名
password: guest #密码
virtual-host:
实体
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
// 名字
private String name;
// 年龄
private Integer age;
// 性别
private String sex;
}
发送者
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.UUID;
@Component
public class HelloWorldSender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send() {
CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
String content = "HelloWorld = " new Date() ", content = " UUID.randomUUID().toString();
this.rabbitTemplate.convertAndSend("HelloWorld",(Object) content,correlationData);
System.out.println("发送成功," new Date() "," content);
}
}
测试
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
public class HelloWorldTestController {
@Autowired
private HelloWorldSender helloWorldSender;
@GetMapping("/helloWorld")
public String hello() throws InterruptedException {
helloWorldSender.send();
return "Hello!";
}
}
服请求 http://localhost:8080/helloWorld
producer控制台
Fri Feb 10 16:02:42 CST 2023发送成功,User(name=HelloWorld, age=18, sex=man)
consumer控制台
Fri Feb 10 16:02:42 CST 2023 接收 : User(name=HelloWorld, age=18, sex=man)
到这里就实现了,简简单单。
我们先关闭consumer服务,在请求http://localhost:8080/helloWorld,然后再启动consumer服务。结果如下
producer控制台
Fri Feb 10 16:04:14 CST 2023发送成功,User(name=HelloWorld, age=18, sex=man)
consumer控制台
Fri Feb 10 16:04:22 CST 2023 接收 : User(name=HelloWorld, age=18, sex=man)
即使服务挂了,队列还在,等服务再启动起了时就自动跑队列里面的东西咯。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgifjfh
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13