Java 弹簧靴反应式redis连接
我是redis反应式实现的新手。我正在尝试在本地主机6379(默认位置)上设置一个使用redis的后端。现在声明“如果想要连接到本地主机6379上的Redis服务器,我们不需要添加任何配置代码。” 于是我像往常一样开始了我的redis: 提出了一个简单的发帖请求Java 弹簧靴反应式redis连接,java,spring-boot,redis,reactive,rsocket,Java,Spring Boot,Redis,Reactive,Rsocket,我是redis反应式实现的新手。我正在尝试在本地主机6379(默认位置)上设置一个使用redis的后端。现在声明“如果想要连接到本地主机6379上的Redis服务器,我们不需要添加任何配置代码。” 于是我像往常一样开始了我的redis: 提出了一个简单的发帖请求 { "uid":"123", "message":"hello world" } 连接到此控制器 @PostMapping("
{
"uid":"123",
"message":"hello world"
}
连接到此控制器
@PostMapping("/api/v1/space/post/")
@ResponseBody
public ResponseEntity<String> postMessage(@RequestBody Message message) throws Exception {
if(messageService.postMessage(message.getUid(), message.getMessage())){
return ResponseEntity.ok("it works!");
} else{
return ResponseEntity.badRequest().body("something's wrong");
}
}
但是运气不好,我猜spring boot以某种方式连接到了一个嵌入式redis,这不是我想要的,那么如何连接到redis实例呢
编辑
这是消息repo&service
repo返回MonoIgnorePublisher,在文档中,Mono返回元素或错误,这是错误吗
回购:
以下是反应器操作配置:
@Bean
public ReactiveRedisOperations<String, Message> redisOperations(ReactiveRedisConnectionFactory factory) {
Jackson2JsonRedisSerializer<Message> serializer = new Jackson2JsonRedisSerializer<>(Message.class);
RedisSerializationContext.RedisSerializationContextBuilder<String, Message> builder = RedisSerializationContext
.newSerializationContext(new StringRedisSerializer());
RedisSerializationContext<String, Message> context = builder.value(serializer)
.hashKey(new StringRedisSerializer()).hashValue(serializer).build();
return new ReactiveRedisTemplate<>(factory, context);
}
@Bean
公共反应器操作再操作(反应器连接工厂){
Jackson2JsonRedisSerializer serializer=新的Jackson2JsonRedisSerializer(Message.class);
RedisSerializationContext.RedisSerializationContextBuilder生成器=RedisSerializationContext
.newSerializationContext(新的StringRedisSerializer());
重新序列化上下文上下文=builder.value(序列化程序)
.hashKey(新的StringRedisSerializer()).hashValue(serializer).build();
返回新的ReactiveRedisTemplate(工厂、上下文);
}
没有提到任何嵌入式redis实例。messageService
看起来像什么?错误可能在那里,您的编写没有成功。@Kayaman嗨,谢谢您的输入,我已经编辑了我的问题,我确实认为这是由于回购协议,但我不知道它是什么。没有提到任何嵌入式redis实例。messageService
看起来像什么?错误可能在那里,你的写作没有成功。@Kayaman嗨,谢谢你的输入,我已经编辑了我的问题,我确实认为这是由于回购协议,我不知道它是什么。
private final ReactiveRedisOperations<String, Message> redisTemplate;
public MessageRepository(ReactiveRedisOperations<String, Message> redisOperations) {
this.redisTemplate = redisOperations;
}
public Mono<Void> save(String authorId, String msg) {
Message message = new Message(authorId, msg);
Mono<Void> res = Mono.when(redisTemplate.<String, Message>opsForHash().put("space", message.getId(), message),
redisTemplate.opsForZSet().add(message.getUid(), message, message.getTimestamp().toEpochDay())).then();
System.out.println(res.toString());
return res;
}
@Autowired
private MessageRepository repo;
public Boolean postMessage(String authorId, String msg) throws Exception {
try{
repo.save(authorId, msg);
}
catch (Exception e){
throw new Exception(e);
}
return true;
}
@Bean
public ReactiveRedisOperations<String, Message> redisOperations(ReactiveRedisConnectionFactory factory) {
Jackson2JsonRedisSerializer<Message> serializer = new Jackson2JsonRedisSerializer<>(Message.class);
RedisSerializationContext.RedisSerializationContextBuilder<String, Message> builder = RedisSerializationContext
.newSerializationContext(new StringRedisSerializer());
RedisSerializationContext<String, Message> context = builder.value(serializer)
.hashKey(new StringRedisSerializer()).hashValue(serializer).build();
return new ReactiveRedisTemplate<>(factory, context);
}