2016-11-27 4 views
0

Нетти сервер конкретизации в Arjen Poutsma's blog post и Josh Long's video example делается путем создания reactor.ipc.netty.http.HttpServer экземпляра и затем вызвать его start или startAndAwait метод с ReactorHttpHandlerAdapter например, в качестве аргумента.Нетти HttpServer апи изменен/отличается от имеющихся примеров

Однако API, кажется, изменилось, как сейчас start и startAndAwait методы ожидают лямбда со следующей подписью:

java.util.function.Function<? super reactor.ipc.netty.http.HttpChannel,? extends org.reactivestreams.Publisher<java.lang.Void>> 

зависимостей проекта и их версии такие же, как в примере проекта Арьена Poutsma в

<dependency> 
     <groupId>org.reactivestreams</groupId> 
     <artifactId>reactive-streams</artifactId> 
     <version>1.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>io.projectreactor</groupId> 
     <artifactId>reactor-core</artifactId> 
     <version>3.0.3.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>io.projectreactor.ipc</groupId> 
     <artifactId>reactor-netty</artifactId> 
     <version>0.5.2.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-core</artifactId> 
     <version>8.5.4</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web-reactive</artifactId> 
     <version>5.0.0.BUILD-SNAPSHOT</version> 
    </dependency> 
    <dependency> 
     <groupId>com.fasterxml.jackson.core</groupId> 
     <artifactId>jackson-databind</artifactId> 
     <version>2.8.2</version> 
    </dependency> 

Каков новый/правильный способ создания подлинного сервера с поддержкой весеннего реактора?

ответ

1

Рекомендуемый способ создания проекта на данный момент - использовать http://start.spring.io/, как предлагает Джош Лонг в своем видео. Это происходит потому, что весна реактивная только релиз-кандидат в настоящее время, и мы должны совместимые версии для запуска samples.This достигается с помощью добавления этого фрагмента в код:

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot.experimental</groupId> 
      <artifactId>spring-boot-dependencies-web-reactive</artifactId> 
      <version>0.1.0.BUILD-SNAPSHOT</version> 
      <type>pom</type> 
      <scope>import</scope> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Согласно вашему вопросу о HTTPServer изменения интерфейса, минимальный рабочий примером является следующие:

import org.reactivestreams.Publisher; 
import org.springframework.http.server.reactive.HttpHandler; 
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter; 
import org.springframework.web.reactive.function.RouterFunction; 
import org.springframework.web.reactive.function.ServerRequest; 
import org.springframework.web.reactive.function.ServerResponse; 
import reactor.core.publisher.Mono; 
import reactor.ipc.netty.http.server.HttpServer; 

import java.io.IOException; 

import static org.springframework.web.reactive.function.RequestPredicates.GET; 
import static org.springframework.web.reactive.function.RouterFunctions.route; 
import static org.springframework.web.reactive.function.RouterFunctions.toHttpHandler; 

public class FunctionalReactiveServer { 

    public static final String HOST = "localhost"; 
    public static final int PORT = 8080; 

    public static void main(String[] args) throws InterruptedException, IOException { 
     RouterFunction<?> route = route(GET("/sayHello"), FunctionalReactiveServer::sayHelloHandler); 
     HttpHandler httpHandler = toHttpHandler(route); 

     ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler); 
     HttpServer server = HttpServer.create(HOST, PORT); 
     server.newHandler(adapter).block(); 

     System.out.println("Press ENTER to exit."); 
     System.in.read(); 
    } 

    public static ServerResponse<Publisher<String>> sayHelloHandler(ServerRequest request) { 
     return ServerResponse.ok().body(Mono.just("Hello!"), String.class); 
    } 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^