如何做电商网站首页,wordpress创建搜索结果,别墅室内设计效果图,济南网络招聘前言#xff1a;
在微服务架构中#xff0c;业务都会被拆分成一个独立的服务#xff0c;服务与服务的通讯是基于http restful的。
Spring cloud有两种服务调用方式:
第一种ribbonrestTemplate第二种feign
一种是ribbonrestTemplate 另一种是feign。在这一篇文章首先讲解下…前言
在微服务架构中业务都会被拆分成一个独立的服务服务与服务的通讯是基于http restful的。
Spring cloud有两种服务调用方式:
第一种ribbonrestTemplate第二种feign
一种是ribbonrestTemplate 另一种是feign。在这一篇文章首先讲解下基于ribbonrest。
一、ribbon简介 ribbon是一个负载均衡客户端可以很好的控制htt和tcp的一些行为。Feign默认集成了ribbon 二、准备工作 这一篇文章基于上一篇文章的工程 启动eureka-server 工程启动service-hi工程它的端口为8762将service-hi的配置文件的端口改为8763,并启动;
这时你会发现service-hi在eureka-server注册了2个实例这就相当于一个小的集群。
三、建一个服务消费者
重新新建一个spring-boot工程取名为service-ribbon; 在它的pom.xml继承了父pom文件并引入了以下依赖
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.gblfy/groupIdartifactIdsc-f-chapter2/artifactIdversion0.0.1-SNAPSHOT/version/parentgroupIdcom.gblfy/groupIdartifactIdservice-ribbon/artifactIdversion0.0.1-SNAPSHOT/versionpackagingjar/packagingnameservice-ribbon/namedescriptionDemo project for Spring Boot/descriptiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-ribbon/artifactId/dependency/dependencies/project在工程的配置文件指定:
服务的注册中心地址http://localhost:8761/eureka/程序名称service-ribbon程序端口8764
服务的注册中心地址:http://localhost:8761/eureka/程序名称为 service-ribbon程序端口为8764配置文件application.yml如下
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/
server:port: 8764
spring:application:name: service-ribbon在工程的启动类中,通过EnableDiscoveryClient向服务中心注册并且向程序的ioc注入一个bean: restTemplate;并通过LoadBalanced注解表明这个restRemplate开启负载均衡的功能
SpringBootApplication
EnableDiscoveryClient
EnableEurekaClient
public class ServiceRibbonApplication {public static void main(String[] args) {SpringApplication.run(ServiceRibbonApplication.class, args);}BeanLoadBalancedRestTemplate restTemplate(){return new RestTemplate();}
}四、 在service-ribbon应用中
新建service包并创建一个测试接口类HelloService在新建service包下面新建impl包并创建一个测试实现类HelloServiceImpl通过之前注入ioc容器的restTemplate来消费service-hi服务的“/hello”接口;在这里我们直接用的程序名替代了具体的url地址在ribbon中它会根据服务名来选择具体的服务实例根据服务实例在请求的时候会用具体的url替换掉服务名
代码如下 测试接口类HelloService
public interface HelloService {String hiService(String myName);
}测试实现类HelloServiceImpl
Service
public class HelloServiceImpl implements HelloService {Autowiredprivate RestTemplate restTemplate;Overridepublic String hiService(String myName) {return restTemplate.getForObject(http://SERVICE-HI//hello?myNamemyName,String.class);}
}在service-ribbon应用中新建controller包结构并创建HelloControler前前端测试类 在controller中用调用HelloService 的方法代码如下
RestController
public class HelloControler {Autowiredprivate HelloService helloService;GetMapping(/hello)public String hi(RequestParam String name){return helloService.hiService(name);}
}五、启动service-ribbon工程 访问Eureka注册中心地址http://localhost:8761 已成功注册到注册中心上了 六、在浏览器上多次访问
http://localhost:8764/hi?namegblfy 浏览器交替显示
hello,gblfy,我的应用名称是:service-hi,端口是8762hello,gblfy,我的应用名称是:service-hi,端口是8763负载均衡 这说明当我们通过调用 restTemplate.getForObject(“http://SERVICE-HI/hi?name”name,String.class)方法时已经做了负载均衡访问了不同的端口的服务实例。
七、此时的架构 一个服务注册中心eureka server,端口为8761service-hi工程跑了两个实例端口分别为8762,8763分别向服务注册中心注册sercvice-ribbon端口为8764,向服务注册中心注册当sercvice-ribbon通过restTemplate调用service-hi的hi接口时因为用ribbon进行了负载均衡会轮流的调用service-hi8762和8763 两个端口的hi接口
本文源码下载
dev分支(最新企业实战版本): https://github.com/gb-heima/springcloud-practical-column/tree/dev/sc-f-chapter2
master分支(入门版本): https://github.com/gb-heima/springcloud-practical-column/tree/master/sc-f-chapter2