项目中使用zookeeper作为服务治理的spring中使用feign访问外接口,特来总结一下,比使用自己封装的http请求方便多了。
maven 添加依赖
<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> <version>9.4.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-jackson</artifactId> <version>9.4.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> <version>9.4.0</version> </dependency> <dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>2.2.0</version> </dependency>
定义好使用接口
public interface MessageAPI { @RequestLine("POST /api/1.0.0/message/validateSmsCode") @Headers("Content-Type: application/x-www-form-urlencoded") ResponseEntity validateSmsCode(@Param("type") String type,@Param("phone") String phone, @Param("code") String code); @RequestLine("POST /api/1.0.0/message/getMessage") @Headers("Content-Type: application/x-www-form-urlencoded") ResponseEntity<MessageReceive> getMessage(@Param("userId") Long userId, @Param("detail") String detail, @Param("offset") String offset, @Param("limit") String limit, @Param("beginTime") String beginTime, @Param("endTime") String endTime); @RequestLine("POST /api/1.0.0/message/getUnreadMessage") @Headers("Content-Type: application/x-www-form-urlencoded") ResponseEntity<MessageReceive> getUnreadMessage(@Param("userId") String userId,@Param("detail") String detail, @Param("offset") String offset,@Param("limit") String limit); @RequestLine("POST /api/1.0.0/message/Send") @Headers("Content-Type: application/x-www-form-urlencoded") ResponseEntity send(@Param("nid") String nid,@Param("phone") String phone, @Param("sendType") String sendType); }
使用spring的Bean注解,管理Bean对象
@Bean public MessageAPI messageAPI() { String serverUrl = configService.getServerUrl(SYSTEM.MESSAGECENTER).getResult(); return Feign.builder() .encoder(new RequestEncoder()) .decoder(new JacksonDecoder()) .requestInterceptor(new HeaderInterceptor<>()) .logger(new Slf4jLogger()) .logLevel(Logger.Level.FULL) .options(opttions) .target(MessageAPI.class, serverUrl); } @Bean public MmarketAPI mmarketAPI() throws KeyManagementException, NoSuchAlgorithmException, URISyntaxException { String serverUrl = configService.getServerUrl(SYSTEM.MMARKET).getResult(); Client client = new Client.Default(new NaiveSSLSocketFactory(getDomainName(serverUrl)), new NaiveHostnameVerifier(getDomainName(serverUrl))); return Feign.builder() .client(client) .encoder(new RequestEncoder()) .decoder(new JacksonDecoder()) .logger(new Slf4jLogger()) .logLevel(Logger.Level.FULL) .options(opttions) .target(MmarketAPI.class, serverUrl); }