精通springcloud:将RestTemplate与服务发现结合使用

@SpringBootApplication

@EnableDiscoveryClient

public class OrderApplication {

QLoadBalanced

@Bean

RestTemplate restTemplate() (

return new RestTemplate() ;

public static void main (Stringl] args)1

new

SpringApplicationBuilder (OrderApplication.class) .web(true) .run (args);

}

//…

}

以下是当前的配置文件。可以使用spring, application.name属性来设置服务的名称。

spring:

application:

name: order-service

server:

port: ${PORT:8090}

eureka:

client:

serviceUrl:

defaultZone: $(EUREKA URL:http://localhost:8761/eureka/}

这里的设置和以前是一样的。我们还启动了所有的微服务。但是,这一次account-service服务和product-service服务的实例数将乘以2。启动每个服务的第二个实例时,可以使用-DPORT或-Dserver.port参数覆盖默认服务器端口,如java -jar -DPORT-9093product- srvice-1.0-SNAPSHOTjar.所有实例都已在Eureka 服务器中注册,这可以使用其UI仪表板轻松查看,如图6.2所示。

精通springcloud:将RestTemplate与服务发现结合使用

这是本书第一次看到负载均衡的实际示例。默认情况下,Ribbon 客户端将在微服务的所有已注册实例之间平均分配流量。该算法称为轮询调度(Round Robin)。实际上,这意味着客户端会记住它转发的最后一个请求的位置,然后将当前请求发送到该行中的下一个服务。这个方法可能会被本书第7章所介绍的其他规则覆盖。通过在ribbon.listOfServers中设置以逗号分隔的服务地址列表,也可以为没有服务发现机制的前一个示例配置负载平衡,如

ribon.listOfServers-localhost:8093,localhost:9093. 回到本示例应用程序,order-service 服务发送的请求将在account-service服务和product-service 服务的两个实例之间进行负载均衡。这和customer- service服务是相似的,只不过后者是在account-service服务的两个实例之间分配流量。如果开发人员已经启动了如图6.2所示的Eureka仪表板上的所有服务实例,并将一些测试请 求发送到order-service服务,则肯定会看到以下日志。在该日志中,我们以加粗形式突出显示了某些片段,它们是Ribbon客户端显示的为目标服务找到的地址列表。

精通springcloud:将RestTemplate与服务发现结合使用

DynamicServerListLoadBalancer for client account-service initialized :

DynamicServerListLoadBalancer: (NFLoadBalancer :name-account-service,

current list of Servers- [minkowp-1.p4 . org:8091, minkowp-1.p4. org : 9091] ,

Load balancer stats=Zone stats: {defaultzone= [Zone :defaultzone; Instance

count:2; Active connections count: 0; Circuit breaker tripped count: 0;

Active connections per server: 0.0; ]

},Server stats: [ [Server :minkowp-l.p4.org:8091; Zone:defaultZone; Total

Requests:0; Successive connection failure:0; Total blackout seconds:0;

Last connection made:Thu Jan 01 01:00:00 CET 1970; First connection made:

Thu Jan 0101:00:00 CET 1970; Active Connections:0; total failure

count"in last (1000) msecs:0; average resp time:0.0; 90 percentile

resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0: max

resp time:0.0; stddev resp time:0.0], [Server :minkowp-l.p4.org:9091;

Zone :defaultZone; Total Requests:0; Successive connection failure:0;

Total blackout seconds:0; Last connection made:Thu Jan 01 01:00:00 CET

1970; First connection made: Thu Jan 01 01 :00:00 CET 1970; Active

Connections:0; total failure count in last (1000) msecs:0; average

resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0;

min resp time:0.0; max resp time:0.0; stddev resp time:0.0]] }

ServerList:org.springframework.cloud.netflix.ribbon. eureka.

Doma inExt ractingServerList@3e878e67

使用Feign客户端

==========

RestTemplate是一个Spring组件,专门用于与Spring Cloud和微服务进行交互。但是,Netflix开发了自己的工具,充当Web服务客户端,用于在独立REST服务之间提供现成可用的通信。其中的Feign客户端通常与带有@LoadBalanced注解的RestTemplate作用相同,但是工作方式更加从容。它是一个Java到HTTP客户端绑定器,通过将注解处理为模板化请求来工作。使用Open Feign 客户端时,开发人员只需创建一个接口并对其进行注解。它与Ribbon和Eureka集成,提供负载均衡的HTTP客户端,从服务发现中获取所有必需的网络地址。Spring Cloud增加了对Spring MVC注解的支持,并使用了与SpringWeb相同的HTTP消息转换器。

对不同区域的支持

========

现在回到上一个示例,我们将对它提出–些更改,以使其系统架构变得稍微复杂一些。如图6.3所示是当前架构的示意图。可以看到,微服务之间的通信模型仍然相同,但现在我们将对每个微服务启动两个实例并将它们分成两个不同的区域。在本书第4章“服务发现"中讨论使用Eureka的服务发现时,已经详细介绍了分区机制,所以我们假定开发人员已经熟悉该内容。本练习的主要目的不仅是演示如何使用Feign客户端,还将说明分区机制如何作用于微服务实例之间的通信。

精通springcloud:将RestTemplate与服务发现结合使用

为应用程序启用Feign

============

要在项目中包含Feign,开发人员必须添加

spring-cloud-starter-feign工件的依赖项或添加Spring Cloud Netlix (版本至少需要为1.4.0)的spring-cloud-starter-openfeign.

org.springframework .cloud

spring-cloud- starter-feign

下一步是通过使用@EnableFeignClients注解main类或配置类来为应用程序启用Feign.此注解将导致搜索应用程序中实现的所有客户端。开发人员还可以通过设置client或basePackages 注解属性来减少使用的客户端数量,如@EnableFeignClients (clients={AccountCietas,rodut.lass)。以下是order- service服务的应用程序的main类。

@SpringBootApplication

@EnableDiscoveryClient

@EnableFeignClients

public class OrderApplication {

public static void main(String[] args) (

new

SpringApplicationBuilder (OrderApplication.class) . web(true) . run(args) ;

}

@Bean

OrderRepository repository() {

return new OrderRepository();

}

}

1.构建Feign接口

有一种提供组件的方法只需要创建带有一-些注解的接口即可,这也是SpringFramework的标准。对于Feign,接口必须使用@FeignClient(name .")进行注解。它有一个必需的属性名称,如果启用了服务发现,则该属性名称对应于调用的微服务名称。否则,它与url属性–起使用,在url中可以设置具体的网络地址。

在这里,@FeignClient 并不是需要使用的唯一注解。 在我们的客户端界面中,每个方法都通过使用@RequestMapping标记它来与特定的HTTP API 端点相关联,当然也可以使用更具体的注解,如@GetMapping、 @PotMapping 或@PutMapping,如本示例源代码片段中所示。

@FeignClient (name = “account-service”)

public interface AccountClient

@PutMapping (" /wi thdraw/ {accountId}/ { amount }")

Account withdraw (OPathVariable (“accountId”) Long id,

@Pathvariable (“amount”) int amount) ;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

image

image

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
" style=“zoom: 33%;” />

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

[外链图片转存中…(img-kAfPj9iY-1712983063805)]

[外链图片转存中…(img-DoGeVJyT-1712983063805)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值