FeignClientBuilder.java 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package com.webchat.rmi.builder;
  2. import feign.Feign;
  3. import feign.Request;
  4. import feign.Target;
  5. import feign.codec.Decoder;
  6. import feign.codec.Encoder;
  7. import feign.jackson.JacksonDecoder;
  8. import feign.jackson.JacksonEncoder;
  9. import org.springframework.cloud.openfeign.support.SpringMvcContract;
  10. /**
  11. * 动态构建RPC客户端
  12. */
  13. public class FeignClientBuilder<T> {
  14. private Encoder encoder = new JacksonEncoder();
  15. private Decoder decoder = new JacksonDecoder();
  16. private Class<T> targetClass;
  17. public FeignClientBuilder(Class<T> targetClass) {
  18. this.targetClass = targetClass;
  19. }
  20. public T build(String instanceHost) {
  21. Feign.Builder builder = Feign.builder()
  22. .encoder(encoder)
  23. .decoder(decoder)
  24. .requestInterceptor(template -> template.header("Content-Type", "application/json"))
  25. .contract(new SpringMvcContract());
  26. // 显式指定 name 和 URL
  27. Target<T> target = new Target.HardCodedTarget<>(
  28. targetClass,
  29. instanceHost, // 自定义唯一标识
  30. instanceHost
  31. );
  32. return builder.target(target);
  33. }
  34. }