項目中使用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);
}