58网站怎么做浏览度才高中国公路建设行业协会网站

当前位置: 首页 > news >正文

58网站怎么做浏览度才高,中国公路建设行业协会网站,js 网站测速,中企z云邮企业邮箱登录码到三十五 #xff1a; 个人主页 微服务架构中#xff0c;服务之间的通信变得尤为关键。OpenFeign#xff0c;一个声明式的Web服务客户端#xff0c;使得REST API的调用变得更加简单和优雅。OpenFeign集成了Ribbon和Hystrix#xff0c;具有负载均衡和容错的能力#xff… 码到三十五 个人主页 微服务架构中服务之间的通信变得尤为关键。OpenFeign一个声明式的Web服务客户端使得REST API的调用变得更加简单和优雅。OpenFeign集成了Ribbon和Hystrix具有负载均衡和容错的能力并且在Spring Cloud的加持下可以轻松地与注册中心nacosEureka和配置中心Spring Cloud Confignacos等组件集成。 目录 一、OpenFeign简介二、OpenFeign的使用1. 添加依赖2. 启用OpenFeign3. 定义Feign客户端4. 注入和使用Feign客户端 三、FeignClient注解四、feign缓存1. Feign缓存的意义2. feign缓存的使用 五、QueryMap支持使用方法 六、MatrixVariable支持使用 MatrixVariableURI 结构 七、CollectionFormat支持八、其他高级特性总结 一、OpenFeign简介 OpenFeign是一个声明式的Web服务客户端它使得编写HTTP客户端变得更简单。使用Feign你只需要创建一个接口并用注解来配置它Feign会自动完成接口的实现。OpenFeign具有可插拔的注解特性同时也支持JAX-RS注解和Feign注解。此外它还支持负载均衡和容错通过集成Spring Cloud alibaba和Spring Cloud可以轻松地查找服务并进行调用。
二、OpenFeign的使用

  1. 添加依赖 首先需要在项目中添加OpenFeign的依赖。Maven可以在pom.xml文件中添加以下依赖 dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactId /dependency2. 启用OpenFeign 在spring Boot应用主类上添加EnableFeignClients注解以启用OpenFeign。 SpringBootApplication EnableFeignClients public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);} }3. 定义Feign客户端 定义Feign客户端接口并使用FeignClient注解进行配置。假设有一个名为user-service的远程服务可以这样定义一个Feign客户端 FeignClient(user-service) public interface UserClient {GetMapping(/users/{id})User getUser(PathVariable(id) Long id); }FeignClient注解指定了要调用的远程服务的名称在本例中是user-service而接口中的方法则定义了具体的HTTP请求。GetMapping注解表示这是一个GET请求PathVariable注解则用于从URL路径中提取参数。
  2. 注入和使用Feign客户端 一旦你定义了Feign客户端接口你就可以在你的服务中注入并使用它了。例如 Service public class UserService {private final UserClient userClient;Autowiredpublic UserService(UserClient userClient) {this.userClient userClient;}public User getUser(Long userId) {return userClient.getUser(userId);} }在这个例子中UserService类注入了UserClient的实例并通过它来调用远程服务。当你调用getUser方法时OpenFeign会自动将HTTP请求发送到指定的远程服务并将响应映射到Java对象上。 三、FeignClient注解 FeignClient注解是用于标记Feign客户端接口的关键注解。通过此注解OpenFeign能够自动生成接口的实现使得开发者能够以声明式的方式调用远程服务。 下面是FeignClient注解的详细参数及其用法 name 含义指定Feign客户端的名称这个名称通常用于服务发现和服务间的负载均衡。在微服务架构中这个名称通常与服务提供者在服务注册中心注册的服务名相对应。用法FeignClient(name serviceName)其中serviceName是远程服务的名称。 url 含义直接指定Feign客户端的请求地址。当该参数被设置时Feign将不再从服务注册中心获取服务地址而是直接使用这个URL作为请求的目标地址。用法FeignClient(url http://localhost:8080)指定具体的服务地址。注意如果同时指定了name和urlurl会覆盖name中定义的地址。 configuration 含义指定Feign客户端的配置类。在这个配置类中可以自定义Feign的各种参数如请求拦截器、编码器、解码器等。用法FeignClient(configuration CustomFeignConfiguration.class)其中CustomFeignConfiguration是自定义的配置类。 fallback 含义指定Feign客户端的降级方案。当请求出现异常时如远程服务不可用或请求超时Feign会返回fallback指定的实例的数据。这通常用于实现熔断和降级逻辑以提高系统的稳定性。用法FeignClient(fallback UserClientFallback.class)其中UserClientFallback是实现了Feign客户端接口的降级处理类。 fallbackFactory 含义与fallback类似但是提供了一个工厂类来创建降级逻辑的实例。这个工厂类需要实现FallbackFactory接口并覆盖create(Throwable cause)方法。这个方法返回一个实现了Feign客户端接口的实例用于处理降级逻辑。用法通常与Hystrix等熔断框架结合使用提供更灵活的降级策略。 path 含义定义所有方法请求的基础路径。这样可以在Feign客户端的接口方法中省略这个基础路径。用法FeignClient(path /api/users)指定所有请求的基础路径。 qualifier 含义当使用Spring的自动装配功能时可以使用qualifier参数来指定一个bean的名称以便在多个相同类型的Feign客户端之间进行区分。用法通常与Qualifier注解结合使用用于解决自动装配时的歧义。 decode404 含义指定当服务端返回404状态时是否抛出FeignException。默认情况下Feign会将404视为一个正常的响应即不会抛出异常。如果将此参数设置为true则当服务端返回404状态时Feign会抛出一个FeignException。用法在需要特殊处理404响应的场景中使用。 primary 含义当存在多个相同类型的bean时将此参数设置为true可以将该bean设置为首选bean。这样在使用Autowired进行自动装配时Spring会优先选择标记为primary的bean。用法在需要指定首选bean的场景中使用。
    此外FeignClient注解还支持使用Spring Expression Language (SpEL) 表达式来动态地指定某些参数值。例如可以使用${property.name}来从配置文件或环境变量中读取值。这种动态配置方式使得Feign客户端更加灵活和可配置。 四、feign缓存
  3. Feign缓存的意义 在网络请求中频繁地调用相同的接口会消耗大量的时间和资源。通过引入缓存机制可以将一些不经常变化且查询频繁的数据存储在本地从而减少对远程服务的调用提高系统的响应速度和性能。 Feign 缓存是通过结合 Spring Framework 的缓存抽象来实现的。当你使用 EnableCaching 注解时Spring Boot 会启用对 Cacheable、CacheEvict、CachePut 等缓存相关注解的支持。对于 Feign 客户端来说这意味着你可以在 Feign 接口的方法上使用这些注解来控制缓存行为。
  4. feign缓存的使用 启用缓存 首先在 Spring Boot 应用中使用 EnableCaching 注解来启用缓存支持。这通常是在配置类或者启动类上添加的。 EnableCaching SpringBootApplication public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args);} }使用 Cacheable 注解 在Feign 客户端接口中可以使用 Cacheable 注解来标记需要缓存的方法。这个注解指定了缓存的名称cacheNames和用于生成缓存键的表达式key。 FeignClient(some-service) public interface SomeServiceClient {Cacheable(cacheNames infos, key #id)GetMapping(/info/{id})public Object info(PathVariable(id) Integer id); }info 方法被标记为可缓存的。当这个方法被调用时Spring 会检查名为 infos 的缓存中是否已经有对应 id 的缓存项。如果有就直接返回缓存的数据如果没有就执行远程调用并将结果存储到缓存中。 配置缓存管理器 通过配置文件来指定缓存管理器的类型和其他相关设置。使用了Redis 作为缓存存储并配置了 Redis 缓存的相关参数。 spring:cache:type: redis # 指定缓存类型为 Redisredis:key-prefix: feign: # 设置 Redis 缓存键的前缀time-to-live: 60s # 设置缓存的有效期为 60 秒这样配置后Feign 客户端的缓存数据会被存储到 Redis 中并且每个缓存项的有效期为 60 秒。这意味着在 60 秒内对同一个 id 的多次请求都会直接从 Redis 缓存中获取数据而不会触发远程调用。当缓存过期后下一次请求会触发远程调用并更新缓存。 五、QueryMap支持 在Feign中使用QueryMap或Spring Cloud OpenFeign中的SpringQueryMap注解可以非常方便地将一个POJOPlain Old Java Object即简单的Java对象或Map的属性和值映射为HTTP GET请求的查询参数。这在构建具有多个查询参数的API调用时特别有用因为它允许你以声明式的方式组织这些参数而不是手动构建查询字符串。 简单点说可以将一个对象中的所有属性值以get的方式拼接到地址栏进行传递。 QueryMap 和 SpringQueryMap QueryMap: OpenFeign原生提供的注解用于将POJO映射为查询参数。但是它与Spring不兼容因为它没有value属性。SpringQueryMap: Spring Cloud OpenFeign提供的与Spring兼容的注解功能和QueryMap类似但可以在Spring环境中使用。 使用方法 定义参数对象: 创建一个简单的Java类Params并为其添加属性和getter方法。这些属性和方法将用于生成查询参数。 public class Params {private Long id;private String name;// getters and setters}在Feign客户端中使用SpringQueryMap: 在Feign客户端接口中使用GetMapping注解来定义一个GET请求并使用SpringQueryMap注解来标记你的POJO参数。 FeignClient(some-service)public interface DemoFeign {GetMapping(/format)Object format(SpringQueryMap Params params);}调用Feign客户端: 在服务中创建一个Params对象设置其属性并通过Feign客户端调用该方法。 GetMapping(/format)public Object format(Params params) {return demoFeign.format(params);}日志输出: 当调用这个方法时Feign会自动将Params对象的属性转换为查询参数并附加到GET请求的URL上。可以通过查看Feign的请求日志来确认这一点。 [DemoFeign#format] — GET http://localhost:8088/demos/format?nametestid111 HTTP/1.1通过这种方式可以简洁地将复杂的查询参数组织到一个对象中并让Feign自动处理参数到查询字符串的转换从而简化了代码并提高了可读性。 六、MatrixVariable支持 在Spring Cloud OpenFeign中MatrixVariable 注解被用来处理 URI 中的矩阵变量。矩阵变量是 URI 的一种特殊参数形式允许你在 URI 路径段中直接包含键值对。这种形式的参数在某些 RESTful API 设计中很有用尤其是当你需要在 URI 中传递多个参数并且这些参数都是针对同一资源的时候。 使用 MatrixVariable MatrixVariable 被用来接收一个映射Map其中键是字符串值是字符串列表。这在处理可能包含多个值的矩阵变量时非常有用。 GetMapping(/m3/{params}) public Object matrix3(MatrixVariable MapString, ListString params) {// … }{params} 是一个路径占位符它表示这个部分将由传递的矩阵变量填充。MatrixVariable 注解告诉 Springparams 参数应该接收来自 URI 矩阵变量的值。 URI 结构 一个包含矩阵变量的 URI 看起来像这样 /m3/someValue;key1value1a,value1b;key2value2在这个 URI 中 /m3/someValue 是基本的路径。;key1value1a,value1b;key2value2 是矩阵变量部分其中 key1 和 key2 是矩阵变量的名称value1a,value1b 和 value2 是相应的值。 注意事项 路径占位符的名称在这个例子中是 {params}必须与 MatrixVariable 注解的变量名一致或者你可以在注解中明确指定名称。矩阵变量的值可以是单个值也可以是用逗号分隔的多个值这取决于你的 API 如何设计。使用矩阵变量时要确保你的 URI 编码和解码逻辑能够正确处理这些变量特别是当值中包含特殊字符时。 七、CollectionFormat支持 在Feign中CollectionFormat 注解用于指定集合参数的格式化方式。当你在Feign客户端的方法中使用集合类型的参数如 ListString时这个注解能够帮助你定义如何将集合中的元素串联起来以便通过HTTP请求发送给服务端。 CollectionFormat 注解接受一个 feign.CollectionFormat 枚举值该枚举定义了不同的格式化选项。在你提供的例子中展示了两种格式化方式CSV 和 PIPES。 CSV (Comma Separated Values): 当使用 feign.CollectionFormat.CSV 时集合中的元素会使用逗号 , 进行分隔。这是最常见和默认的格式。 示例 GetMapping(/cf) CollectionFormat(feign.CollectionFormat.CSV) public Object cf(RequestParam(ids) ListString ids);调用该方法并传递 List.of(S1, S2, S3) 时生成的URL查询参数会是 idsS1,S2,S3。 PIPES (| separator): 当使用 feign.CollectionFormat.PIPES 时集合中的元素会使用竖线 | 进行分隔。 示例 GetMapping(/cf) CollectionFormat(feign.CollectionFormat.PIPES) public Object cf(RequestParam(ids) ListString ids);同样地调用该方法并传递 List.of(S1, S2, S3) 时生成的URL查询参数会是 idsS1|S2|S3。
    这个注解在处理需要特定格式的集合参数时非常有用尤其是当服务端期望接收特定格式的集合数据时。通过使用 CollectionFormat你可以确保Feign客户端发送的请求符合服务端的期望从而避免格式错误导致的问题。 CollectionFormat 可以应用于整个Feign客户端类或者单独的方法上。如果应用于类上它将影响该类中所有使用集合参数的方法。如果只需要对某个特定方法应用不同的集合格式可以将注解直接应用于该方法上。 八、其他高级特性 OpenFeign还提供了许多高级特性如负载均衡、容错、请求拦截和重试等。这些特性可以帮助构建更健壮、更可靠的微服务架构。 负载均衡OpenFeign集成了Ribbon支持多种负载均衡策略如轮询、随机等。你可以根据需要选择合适的策略来分发请求。容错通过与Hystrix的集成OpenFeign提供了熔断和降级功能。当远程服务出现故障或响应过慢时可以自动切换到降级逻辑保证系统的稳定性。请求拦截可以使用RequestInterceptor接口实现自定义的请求拦截器用于在发送请求之前或之后执行特定的逻辑如添加认证信息、记录日志等。重试机制OpenFeign支持配置请求的重试次数和间隔以提高系统的可靠性。 总结 OpenFeign是一个强大的声明式Web服务客户端它简化了远程服务调用的复杂性并提供了负载均衡、容错等高级特性。通过使用OpenFeign你可以更加专注于业务逻辑的实现而无需关心底层的HTTP通信细节。希望本文能帮助你更好地理解和使用OpenFeign构建高效、稳定的微服务架构。 听说…关注下面公众号的人都变牛了纯技术纯干货 !