腾讯2分彩彩金_架构师入门:搭建基本的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”的输出。不过在大多数的场景里,让让我们 让让我们 儿一般是在tcp连接里调用服务,而不是简单地通过浏览器调用,在下面的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类型的对象两种不具备调用远程服务的能力,也什么都有说,可能性让让我们 让让我们 儿加进这名注解,tcp连接暂且能跑通。都不都还可不可以了当让让我们 让让我们 儿引入该注解,该措施所返回的对象不都还可不可以具备调用远程服务的能力。

    在提供服务的第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启动tcp连接后,在浏览器里输入http://localhost:8888/后,能在信息面板里看多有另一个多 多服务,分别是服务提供者SayHello和服务调用者CallHello,如下图所示。

    

    可能性服务调用者运行在500500端口上,什么都有可能性让让我们 让让我们 儿在浏览器里输入http://localhost:500500/hello,能看多在浏览器里输出“In Caller, hello Eureka”,这什么都有明它确实可能性调用了服务提供者SayHello里的hello措施。

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

猜你喜欢

大发快3彩票_2019Q1农村电商报告:Q1市场规模超4000亿元

市大发快3彩票场下沉趋势下,农村电商这块大发快3彩票待深入开垦的沃土吸引大发快3彩票了阿里、京东、苏宁等互联大发快3彩票网大佬的投入布局;政策上也持续利好信号,2019中央一号

2020-05-29

5分pk10注册网址 _有声音频APP完成市场培育

伴随着移动互联网的快速发展,国内电信网络提速降费不断推进,用户获取信息方法 从文字、图片扩展到音频和视频。其中以手机、平板等移动设备、智能穿戴设备及车载等智能终端为载体,通过

2020-05-29

5分pk10平台开户 _邓超提前预测跑男最新名单 迪丽热巴被疑倒贴

来源: 新闻客户端 2017-08-1815:18:49   导读:邓超17日在微博时不时 PO文:“跑男最新名单…

2020-05-29

分分一分快三怎么玩_

1.简介俗话说:磨刀不误砍柴工,就是在这一 人要开始英文英文写自动化脚本就是,这一 人先来学习和了解几个 基本概念,在完全掌握了这几个 概念就是,能够这一 人快速上手

2020-05-29

1分pk10登录中心_大妈嫌闷开飞机安全门 航班因此延误一小时

近年来事先生活条件的改善,那末来不要 的人选取高铁及航班出行。然而同时可是 时有不少乘客违反乘坐规定的新闻被曝出,类似于于事件有在公共交通工...近年来事先生活条件的改善,

2020-05-29