Spring Boot中@RabbitListener注解使用RabbitMQ
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot中@RabbitListener注解使用RabbitMQ相关的知识,希望对你有一定的参考价值。
参考技术A通过注入AmqpTemplate接口的实例来实现消息的发送,AmqpTemplate接口定义了一套针对AMQP协议的基础操作。在Spring Boot中会根据配置来注入其具体实现。在该生产者,我们会产生一个字符串,并发送到名为hello的队列中。
通过@RabbitListener注解定义该类对hello队列的监听,并用@RabbitHandler注解来指定对消息的处理方法。所以,该消费者实现了对hello队列的消费,消费操作为输出消息的字符串内容。
用来配置队列、交换器、路由等高级信息。这里我们以入门为主,先以最小化的配置来定义,以完成一个基本的生产和消费过程。
定义多个消费者关注同一个队列,消息会被随即进行分配,一个消息被消费后,不会被另一个消费者再次消费
源码托管地址
git@git.dev.tencent.com :douguohai/studyproject.git
中的rabbitmq1
Spring boot中使用jwt
spring boot 使用 jwt
本文旨在介绍如何在spring boot
中使用jwt
,不会介绍什么是jwt
。
一、导入依赖
1. spring-boot依赖
<!--父依赖-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. jwt 依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.4.0</version>
</dependency>
二、应用
创建一个JwtUtil文件
package cn.edu.swpu.news.util;
import cn.edu.swpu.news.entity.User;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;
import com.auth0.jwt.interfaces.DecodedJWT;
import lombok.extern.slf4j.Slf4j;
import java.time.*;
import java.util.HashMap;
import java.util.Map;
/**
* jwt工具类
* @author ycwiacb 2020/5/2
*/
@Slf4j
public class JwtUtil {
//这里填写你自己自定义的SECRET
private static final String SECRET = "ycwiacb-secret";
/**生成token*/
public static String sign(User user) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
Map<String, Object> map = new HashMap<>(16);
map.put("alg", "HS256");
map.put("typ", "JWT");
return JWT.create().withHeader(map)
.withClaim("userId", user.getId())
.withClaim("username", user.getUsername())
.withIssuer("ycwiacb")
.withIssuedAt(DateUtil.localDateTimeToDate(LocalDateTime.now()))
.withExpiresAt(DateUtil.localDateTimeToDate(LocalDateTime.now().plusMinutes(30)))
.sign(algorithm);
}
/**验证token并返回id*/
public static Long verify(String token) {
long userId = 0L;
try {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier jwtVerifier = JWT.require(algorithm)
.withIssuer("ycwiacb")
.build();
DecodedJWT decodedjwt = jwtVerifier.verify(token);
userId = decodedjwt.getClaim("userId").asLong();
} catch (JWTVerificationException e) {
log.error("解析token失败, exception = {}", e.toString());
}
return userId;
}
}
注意:这里使用的是decodedjwt.getClaim("userId").asLong(); 这里是asLong(),对应的有asString(),而非toString()。
附上DateUtil文件
package cn.edu.swpu.news.util;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
/**
* @author ycwiacb 2020/5/5
*/
public class DateUtil {
/**
*将LocalDateTime 时间类转化为Date
* @return Date
*/
public static Date localDateTimeToDate(LocalDateTime dateTime) {
return Date.from(dateTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant());
}
}
测试,JwtUtilTest.java
package cn.edu.swpu.news.util;
import cn.edu.swpu.news.entity.User;
import org.junit.Test;
/**
* @author ycwiacb 2020/5/10
*/
public class JwtUtilTest {
@Test
public void sign() {
User user = new User();
user.setId(1L);
user.setUsername("testUserName");
System.out.println("测试jwt:token = " + JwtUtil.sign(user));
}
@Test
public void verify() {
String token = "你生成的token";
System.out.println("解析token:userId=" + JwtUtil.verify(token));
}
}
测试结果:
以上就是对jwt的基本操作,具体请看文档
三、参考文档
java-jwt : https://github.com/auth0/java-jwt
以上是关于Spring Boot中@RabbitListener注解使用RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章
spring boot:Spring Boot中Redis的使用
如何在 spring-boot 中禁用 spring-data-mongodb 自动配置
spring boot学习02如何在spring boot项目中访问jsp