使用zookeeper作为服务治理的spring中使用feign访问外接口

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

猜你喜欢

转载自blog.csdn.net/long13631/article/details/79744919
今日推荐