Можно ли реализовать Redis-реактивную функциональность, используя spring-boot-starter-web? - PullRequest
0 голосов
/ 08 июля 2019

Я собираюсь использовать редис-реактив в весенней загрузке.Однако весь существующий код - это код, который работает в режиме webmvc.Есть ли какие-либо проблемы при попытке использовать redis-реактивный с webmvc вместо webflux?В сервлете 3.1 он работает асинхронно, хотя webflux не используется.

Это пример кода.Пожалуйста, позвольте мне указать, есть ли что-то, что я не знаком с асинхронной разработкой методов.Если вы используете реактивный-redis с webmvc вместо webflux, пожалуйста, дайте мне знать, в чем проблема.

пружинная зависимость

compile('org.springframework.boot:spring-boot-starter-data-redis-reactive')
compile("org.springframework.boot:spring-boot-starter-web")

пример кода

@RestController
public class CoffeeController {
    private final ReactiveRedisOperations<String, Coffee> coffeeOps;
    private final ReactiveRedisConnectionFactory factory;

    WebClient client = WebClient.create();

    public CoffeeController(ReactiveRedisConnectionFactory factory, ReactiveRedisOperations<String, Coffee> coffeeOps) {
        this.factory = factory;
        this.coffeeOps = coffeeOps;
    }

    @GetMapping("/coffees")
    public Flux<Coffee> all() {
return coffeeOps.keys("*")
                .flatMap(coffeeOps.opsForValue()::get);
    }


}

Поток выполнения запроса журнала результатов -> nio-8080-exec-3

рабочий поток redis -> ioEventLoop-4-1

поток ответов -> nio-8080-exec-4

2019-07-05 13:31:32.788 TRACE 38376 --- [nio-8080-exec-3] o.s.b.w.s.f.OrderedRequestContextFilter  : Bound request context to thread: org.apache.catalina.connector.RequestFacade@1f500e3e
2019-07-05 13:31:32.788 TRACE 38376 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet        : GET "/coffees", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
2019-07-05 13:31:32.789 TRACE 38376 --- [nio-8080-exec-3] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'coffeeController'
2019-07-05 13:31:32.789 TRACE 38376 --- [nio-8080-exec-3] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public reactor.core.publisher.Flux<hello.Coffee> hello.CoffeeController.all()
2019-07-05 13:31:32.789 TRACE 38376 --- [nio-8080-exec-3] .w.s.m.m.a.ServletInvocableHandlerMethod : Arguments: []
2019-07-05 13:31:32.789 DEBUG 38376 --- [nio-8080-exec-3] o.s.w.c.request.async.WebAsyncManager    : Started async request
2019-07-05 13:31:32.790 DEBUG 38376 --- [nio-8080-exec-3] o.s.web.servlet.DispatcherServlet        : Exiting but response remains open for further handling
2019-07-05 13:31:32.790 TRACE 38376 --- [nio-8080-exec-3] o.s.b.w.s.f.OrderedRequestContextFilter  : Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@1f500e3e
2019-07-05 13:31:32.792 DEBUG 38376 --- [ioEventLoop-4-1] o.s.w.c.request.async.WebAsyncManager    : Async result set, dispatch to /coffees
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : "ASYNC" dispatch for GET "/coffees", parameters={}, headers={masked} in DispatcherServlet 'dispatcherServlet'
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] o.s.b.f.s.DefaultListableBeanFactory     : Returning cached instance of singleton bean 'coffeeController'
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped to public reactor.core.publisher.Flux<hello.Coffee> hello.CoffeeController.all()
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] s.w.s.m.m.a.RequestMappingHandlerAdapter : Resume with async result [[Coffee(id=44d68449-4d3b-44f2-b117-7018f7eb434b, name=Black Alert Redis), Coffee(id=4e9f48a0-4cd4-418f-8336-6a638f501ba7, name=Darth Redis), Coffee(id=71019626-6ad2-47d0-a1a5-f619f06f9f2c, name=Jet Black Redis)]]
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] dlerMethod$ConcurrentResultHandlerMethod : Arguments: []
2019-07-05 13:31:32.793 DEBUG 38376 --- [nio-8080-exec-4] m.m.a.RequestResponseBodyMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/*+json, application/json, application/*+json]
2019-07-05 13:31:32.793 TRACE 38376 --- [nio-8080-exec-4] m.m.a.RequestResponseBodyMethodProcessor : Writing [[Coffee(id=44d68449-4d3b-44f2-b117-7018f7eb434b, name=Black Alert Redis), Coffee(id=4e9f48a0-4cd4-418f-8336-6a638f501ba7, name=Darth Redis), Coffee(id=71019626-6ad2-47d0-a1a5-f619f06f9f2c, name=Jet Black Redis)]]
2019-07-05 13:31:32.794 TRACE 38376 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : No view rendering, null ModelAndView returned.
2019-07-05 13:31:32.794 DEBUG 38376 --- [nio-8080-exec-4] o.s.web.servlet.DispatcherServlet        : Exiting from "ASYNC" dispatch, status 200, headers={masked}
...