好运五分快三开户_架构师入门:搭建基本的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: 500500
6    eureka: 
7      client:
8        serviceUrl:
9          defaultZone: http://localhost:8888/eureka/

    在第3行里,我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 指定了本服务的名字叫callHello,在第5行里我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 指定了本服务是运行在500500端口,在第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,如下图所示。

    

    将会服务调用者运行在500500端口上,所以所以将会我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 我们歌词 在浏览器里输入http://localhost:500500/hello,能看多在浏览器里输出“In Caller, hello Eureka”,这本来明它我我随便说说将会调用了服务提供者SayHello里的hello最好的方法。

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