大发快三app软件_架构师入门:搭建基本的Eureka架构(从项目里抽取)

  • 时间:
  • 浏览:1
  • 来源:泽宇博客 - 专注共享知识共享网资源

不在 废话,直接上干货,理论每种.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 须要看其它资料。

这里是每种关键代码,已经 须要完整可运行的代码,请给被委托人留言。

在后继,还将给出搭建高可用Eureka架构的最好的方法 。

1 Eureka的框架图

    

    在Eureka的服务器里,含有 着记录当前所有服务列表的注册中心,而服务提供者和调用者所在的机器均被称为“Eureka客户端”。

    服务提供者会和服务器进行如下的交互:第一,注册本身能提供的服务,第二,定时发送心跳,以此证明本服务占据 生效情况报告。而服务调用者一般会从服务器查找服务,并根据找到的结果从服务提供者这端调用服务。

2.1搭建Eureka服务器

    这里.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 将在EurekaBasicDemo-Server项目里编写Eureka服务器的代码。

    第一步,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 创建完Maven类型的项目后,须要在pom.xml里编写该项目所须要的依赖包,关键代码如下。 

1    <dependencyManagement>
2         <dependencies>
3             <dependency>
4                 <groupId>org.springframework.cloud</groupId> 
5    <artifactId>spring-cloud-dependencies</artifactId> 
6                 <version>Brixton.SR5</version> 
7                 <type>pom</type> 
8                 <scope>import</scope> 
9             </dependency> 
10         </dependencies>
11      </dependencyManagement>
12      <dependencies>
13        <dependency>
14            <groupId>org.springframework.cloud</groupId>
15    <artifactId>spring-cloud-starter-eureka-server</artifactId>
16        </dependency>
17    </project>

    从第1到第11行,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 引入了版本号是Brixton.SR5的Spring Cloud包,你你你这种包里含有 着Eureka的支持包,在第13到16行的代码里,引入了Eureka Server端的支持包,引入后,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 都可不可以 在项目的java文件里使用Eureka的行态。

    第二步,在application.yml里,须要配置Eureka服务端的信息,代码如下。    

1    server:
2      port: 8888
3    eureka:
4      instance:
5        hostname: localhost
6      client:
7        register-with-eureka: false
8        fetch-registry: false 
9        serviceUrl:
10          defaultZone: http://localhost:8888/eureka/

    从第2和第5行里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 指定了Eureka服务端使用的主机地址和端口号,这里分别是localhost和8888,也已经 说让服务端运行在本地8888号端口,在第10行里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 指定了服务端所在的url地址。

    已经 这已经 是服务器端,已经 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 通过第7行的代码,指定不想向Eureka注册中心注册被委托人,同理,服务器端的职责是维护服务列表而都是调用服务,已经 通过第8行的代码指定本端不想检索服务。

    第三步,在RegisterCenterApp.java里编写Eureka启动代码。    

1    省略必要的package和import代码
2    @EnableEurekaServer //指定本项目是Eureka服务端
3    @SpringBootApplication
4    public class RegisterCenterApp
5    {
6        public static void main( String[] args )
7        {SpringApplication.run(RegisterCenterApp.class, args);}
8    }

    在第6行的main函数里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 还是通过run最好的方法 启动Eureka服务。

    运行App.java启动Eureka服务器端后,在浏览器里输入localhost:8888后,须要看完如下图所示的Eureka服务器端的信息面板,其中Instances currently registered with Eureka目前是空的,说明尚未有服务注册到本服务器的注册中心。

        

2.2 编写作为服务提供者的Eureka客户端

    这里.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 将在EurekaBasicDemo-ServerProvider项目里编写Eureka客户端的代码,在你你你这种项目里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 将提供另一一个多多多SayHello的服务。

    第一步,创建完Maven类型的项目后,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 须要在pom.xml里写入本项目的依赖包,关键代码如下。本项目所用到的依赖包后后都用过,已经 这里就不展开讲了。 

1    <dependencyManagement>
2         <dependencies>
3             <dependency>
4                 <groupId>org.springframework.cloud</groupId>              <artifactId>spring-cloud-dependencies</artifactId> 
5                 <version>Brixton.SR5</version> 
6                 <type>pom</type> 
7                 <scope>import</scope> 
8             </dependency> 
9         </dependencies>
10      </dependencyManagement>
11      <dependencies>
12        <dependency>
13                <groupId>org.springframework.boot</groupId>
14                <artifactId>spring-boot-starter-web</artifactId>
15                <version>1.5.4.RELEASE</version>
16        </dependency>
17        <dependency>
18            <groupId>org.springframework.cloud</groupId>
19            <artifactId>spring-cloud-starter-eureka</artifactId>
20        </dependency> 
21      </dependencies>

    第二步,在application.yml里编写针对服务提供者的配置信息,代码如下。    

1    server:
2      port: 1111
3    spring:
4      application:
5        name: sayHello
6    eureka:  
7      client:
8        serviceUrl:
9          defaultZone: http://localhost:8888/eureka/

    从第2行里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 能看完本服务将启用1111号端口,在第5行,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 指定了本服务的名字,叫sayHello,在第9行,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 把本服务注册到了Eureka服务端,也已经 注册中心里。

    第三步,在Controller.java里,编写控制器每种的代码,在其中实现对外的服务。    

1    //省略必要的package和import代码
2    @RestController //说明这是个控制器
3    public class Controller {
4        @Autowired //描述Eureka客户端信息的类
5        private DiscoveryClient client;
6        @RequestMapping(value = "/hello/{username}", method = RequestMethod.GET    )
7        public String hello(@PathVariable("username") String username) {        
8            ServiceInstance instance = client.getLocalServiceInstance();
9             //输出服务相关的信息
10            System.out.println("host is:" + instance.getHost());
11            System.out.println("port is:" + instance.getPort());
12            System.out.println("ServiceID is:" + instance.getServiceId() );
13            //返回字符串
14            return "hello " + username;
15        }
16    }

    .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 通过第6和第7行的代码,指定了能触发hello最好的方法 的url格式,在你你你这种最好的方法 里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 首先通过第10到12行的代码,输出了主机名、端口号和ServiceID等信息,并在第14行里,返回了另一一个多多多字符串。

    第四步,编写Spring Boot的启动类ServiceProviderApp.java,代码如下。    

1    //省略必要的package和import代码
2    @SpringBootApplication
3    @EnableEurekaClient
4    public class ServiceProviderApp {
5        public static void main( String[] args )
6        {SpringApplication.run(ServiceProviderApp.class, args);}
7    }

    已经 这是占据 Eureka的客户端,已经 加入第3行所示的注解,在main函数里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 依然是通过run最好的方法 启动Spring Boot服务。    

2.3 编写服务调用者的代码

    启动Eureka服务器端的RegisterApp.java和服务提供者端的ServiceProviderApp.java,在浏览器里输入http://localhost:8888/后,在Eureka的信息面板须要看完SayHello服务,如下图所示。

    

    已经 这时.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 在浏览器里输入http://localhost:1111/hello/Mike,能直接调用服务,一同能看浏览器里看完“hello Mike”的输出。不过在大多数的场景里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 一般是在守护进程里调用服务,而都是简单地通过浏览器调用,在下面的EurekaBasicDemo-ServiceCaller项目里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 将演示在Eureka客户端调用服务的步骤。

    第一步。在你你你这种Maven项目里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 编写如下的pom.xml配置,关键代码如下。    

1    <dependencyManagement>
2         <dependencies>
3             <dependency>
4                 <groupId>org.springframework.cloud</groupId>         

<artifactId>spring-cloud-dependencies</artifactId> 5 <version>Brixton.SR5</version> 6 <type>pom</type> 7 <scope>import</scope> 8 </dependency> 9 </dependencies> 10 </dependencyManagement> 11 <dependencies> 12 <dependency> 13 <groupId>org.springframework.boot</groupId> 14 <artifactId>spring-boot-starter-web</artifactId> 15 <version>1.5.4.RELEASE</version> 16 </dependency> 17 <dependency> 18 <groupId>org.springframework.cloud</groupId> 19 <artifactId>spring-cloud-starter-eureka</artifactId> 20 </dependency> 21 <dependency> 22 <groupId>org.springframework.cloud</groupId> 23 <artifactId>spring-cloud-starter-ribbon</artifactId> 24 </dependency> 25 </dependencies>

    请.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 注意,从第21到24行,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 须要引入 ribbon的依赖包,通过它.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 须要实现负载均衡。而其它的依赖包.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 后后都已经 见过,已经 就不再解释了。

    第二步,在application.yml里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 编写针对本项目的配置信息,代码如下。    

1    spring:
2      application:
3        name: callHello
4    server:
5      port: 3030
6    eureka: 
7      client:
8        serviceUrl:
9          defaultZone: http://localhost:8888/eureka/

    在第3行里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 指定了本服务的名字叫callHello,在第5行里.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 指定了本服务是运行在3030端口,在第9行里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 把本服务注册到Eureka服务器上。

    第三步,编写提供服务的控制器类,在其中调用服务提供者的提供的服务,代码如下。    

1    //省略必要的package和import代码
2    @RestController
3    @Configuration
4    public class Controller {
5        @Bean
6        @LoadBalanced
7        public RestTemplate getRestTemplate()
8        { return new RestTemplate();   }
9    
10        @RequestMapping(value = "/hello", method = RequestMethod.GET    )
11        public String hello() {        
12            RestTemplate template = getRestTemplate();
13            String retVal = template.getForEntity("http://sayHello/hello/Eureka", String.class).getBody();
14            return "In Caller, " + retVal;
15        }
16    }

    在第7行的getRestTemplate最好的方法 上,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 启动了@LoadBalanced(负载均衡)的注解。关于负载均衡的细节将在里面章节里完整描述,这里.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 引入@LoadBalanced注解的原应是,RestTemplate类型的对象本身不具备调用远程服务的能力,也已经 说,已经 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 添加你你你这种注解,守护进程并可不都可不可以 跑通。可不都可不可以 都可不可以 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 引入该注解,该最好的方法 所返回的对象都可不可以 具备调用远程服务的能力。

    在提供服务的第11行的hello最好的方法 里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 是通过第13行的代码,用RestTemplate类型对象的getForEntity最好的方法 ,调用服务提供者sayHello提供的hello最好的方法 。

    这里.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 是通过http://sayHello/hello/Eureka你你你这种url去发现对应的服务,在你你你这种url里,只含有 了服务名sayHello,并不在 含有 服务所在的主机名和端口号,换句话说,该url未必是通过注册中心定位到sayHello服务的物理位置的。

    至于你你你这种url和该服务物理位置的绑定关系,是在Eureka外部实现的,这也是Eureka须要被称作“服务发现框架”的原应。

    第四步,在ServiceCallerApp.java最好的方法 里,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 编写启动本服务的代码,这.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 已经 粘壳悉了,已经 就不再讲述了。    

1    //省略必要的package和import代码
2    @EnableDiscoveryClient
3    @SpringBootApplication
4    public class ServiceCallerApp 
5    {
6        public static void main( String[] args )
7        {SpringApplication.run(ServiceCallerApp.class, args); }
8    }

2.4 通过服务调用者调用服务

    .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 依次启动Eureka服务器(也已经 注册中心)、服务提供者和服务调用者的Spring Boot启动守护进程后,在浏览器里输入http://localhost:8888/后,能在信息面板里看完有另一一个多多多服务,分别是服务提供者SayHello和服务调用者CallHello,如下图所示。

    

    已经 服务调用者运行在3030端口上,已经 已经 .我歌词 歌词 .我歌词 歌词 .我歌词 歌词 在浏览器里输入http://localhost:3030/hello,能看完在浏览器里输出“In Caller, hello Eureka”,这已经 明它未必已经 调用了服务提供者SayHello里的hello最好的方法 。

    此外,.我歌词 歌词 .我歌词 歌词 .我歌词 歌词 还能在服务提供者所在的控制台里看完host、port和ServiceID的输出,如下图所示,这能进一步验证了服务提供者里控制器类里的hello最好的方法 被服务调用者调到。