APIに接続するために、リボンと偽装でいくつかのテストを行っています。API はスプリング ブートを使用して実行されています。
@Controller
@EnableAutoConfiguration
public class MovieService {
@RequestMapping("/")
@ResponseBody
List<String> findAllMovies() {
System.out.println("finding all movies");
return Arrays.asList("start wars", "inception", "the martian");
}
public static void main(String[] args) throws Exception {
SpringApplication.run(MovieService.class, args);
}
}
これは、feign インターフェイスを使用した私のクライアント コードです。
public interface MovieService {
@RequestLine("GET /")
List<String> findAllMovies();
}
私が単独で偽物を使用すると、すべてが機能します:
public class MovieClient {
public static void main(String args[]) {
MovieService movieService = Feign.builder()
.decoder(new GsonDecoder())
.target(MovieService.class, "http://localhost:8080");
System.out.println(movieService.findAllMovies());
}
}
しかし、リボンも使用する場合:
public class MovieClient {
public static void main(String args[]) {
ConfigurationManager.getConfigInstance().setProperty("MovieService.ribbon." + CommonClientConfigKey.MaxAutoRetriesNextServer, "3");
ConfigurationManager.getConfigInstance().setProperty("MovieService.ribbon." + CommonClientConfigKey.ListOfServers, "localhost:8080");
MovieService movieService = Feign.builder().client(RibbonClient.create()).target(MovieService.class, "https://MovieService");
System.out.println(movieService.findAllMovies());
}
}
スプリング ブート サーバーのログに次のエラーが表示されます。
2016-01-06 21:26:50.670 INFO 61353 --- [nio-8080-exec-1] o.a.coyote.http11.Http11NioProcessor : Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.ArrayIndexOutOfBoundsException: -64
at org.apache.coyote.http11.AbstractNioInputBuffer.parseHeader(AbstractNioInputBuffer.java:474) ~[tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.coyote.http11.AbstractNioInputBuffer.parseHeaders(AbstractNioInputBuffer.java:381) ~[tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1025) ~[tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) [tomcat-embed-core-8.0.30.jar:8.0.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) [tomcat-embed-core-8.0.30.jar:8.0.30]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.30.jar:8.0.30]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05]
私のスプリングブートアプリで次のヘッダーを受け取っているようです:
2016-01-06 21:43:52.606 DEBUG 61415 --- [nio-8080-exec-9] o.a.c.http11.InternalNioInputBuffer : Received [ÏËV|jà^kgáxþæèðMn¨{oý²]Aì7FÀ#À'<À%À)g@À À/ÀÀ32ÀÀÀÀÀ+À/À-À1¢ÀÀ
ÿ\
42
私が間違っていることは何ですか?何か不足していますか?