RSocket trabaja con datos generados pero no con la primavera reactiva MongoDB

Peter Veres:

Resumen de resolución:

En la mayoría de los ejemplos RSocket Actualmente no hay el aceptor del lado del servidor es simplemente construido como un nuevo objeto (como nuevo MqttMessageService () abajo) incluso en tutoriales relacionadas SpringBoot. Lo cual está bien si se generan ejemplo contenido correcto en la clase aceptor, pero puede conducir a la dependencia a continuación confusión relacionada inyección cuando el aceptor depende de otros granos en el recipiente.

pregunta original:

Consigo una NullPointerException cuando se trata de transmitir las entradas de base de datos utilizando un repositorio de datos MongoDB primavera reactiva a través del servidor Java de Rsocket.

El problema es que durante la depuración de todos los componentes trabajan por separado : puedo conseguir los datos solicitados a través del mismo repositorio MongoDB y también puedo transmitir datos generados al azar entre el mismo servidor y cliente utilizando Rsocket.

Así que estoy bien perdiendo algo realmente básico o puede haber un problema con el uso de reactivos y MongoDB Rsocket juntos.

Aquí está el original del lado del servidor de configuración Rsocket :

@Configuration
public class RsocketConfig {

    @PostConstruct
    public void startServer() {
        RSocketFactory.receive()
                .acceptor((setup, sendingSocket) -> Mono.just(new MqttMessageService()))
                .transport(TcpServerTransport.create(8802))
                .start()
                .block()
                .onClose()
    }
}

Y aquí es el trabajo de configuración Rsocket lado del servidor con DI adecuada:

@Configuration
public class RsocketConfig {

    @Autowired
    MqttMessageService messageService;

    @PostConstruct
    public void startServer() {
        RSocketFactory.receive()
                .acceptor((setup, sendingSocket) -> Mono.just(messageService))
                .transport(TcpServerTransport.create(8802))
                .start()
                .block()
                .onClose()
    }
}

Aquí está la aplicación AbstractRSocket lado del servidor , donde una NullPointerException es lanzada en service.findAll retorno ().

@Service
public class MqttMessageService extends AbstractRSocket {



    @Autowired 
    private MqttMessageEntityService service;

    @Override
    public Flux<Payload> requestStream(Payload payload) {
        return service.findAll()
            .map(mqttMessageEntity -> DefaultPayload.create(mqttMessageEntity.toString()));

    }
}

Éstos son el repositorio reactiva y el servicio relacionado. Devuelve el servicio nulo cuando se inyecta a la aplicación AbstractRSocket del servidor, pero funciona bien cuando se inyecta en otras clases:

@Service
public class MqttMessageEntityService {

    @Autowired
    private MqttMessageEntityRepository repository;

    public Flux<MqttMessageEntity> findAll() {
        return repository.findAll();
    }

}

public interface MqttMessageEntityRepository extends ReactiveMongoRepository<MqttMessageEntity, String> {

}

Y aquí está el lado del cliente código que funciona a la perfección con el contenido de la prueba:

@Configuration
public class RsocketConfig {

    @PostConstruct
    public void testRsocket() {

        RSocket rSocketClient = RSocketFactory
                .connect()
                .transport(TcpClientTransport.create(8802))
                .start()
                .block();

        rSocketClient
                .requestStream(DefaultPayload.create(""))
                .blockLast();
    }        
}

Podría ser un poco por encima de mi nivel de conocimiento aquí y los recursos son muy limitados sobre el tema así que aprecio ninguna pista hacia la solución :)

Robert Roeser:

Respecto a

@PostConstruct
public void startServer() {
    RSocketFactory.receive()
            .acceptor((setup, sendingSocket) -> Mono.just(new MqttMessageService()))
            .transport(TcpServerTransport.create(8802))
            .start()
            .block()
            .onClose();
}

¿Está utilizando el mantener vivo el servidor? Si es así añadir otro bloque después de la onClose ().

MessageEntityService es nula? Debido a que se ve como la única cosa que podría causar un error si las variables topicStart y el módulo no lo son. Especialmente si el otro código funciona - no puedo ver nada que pueda causar un problema desde el lado RSocket.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=211689&siteId=1
Recomendado
Clasificación