A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

简介
Eureka是Netflix开源的基于rest的服务治理方案,分为Server端和Client端,Server端为注册中心,其他微服务通过Client端连接Server端进行服务的注册和发现。
项目介绍
  • sc-parent,父模块
  • sc-provider,提供者模块
  • sc-eureka,注册中心
  • sc-consumer-discovery,消费者模块
搭建父模块
创建父模块sc-parent,pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId> com.cf</groupId>  <artifactId>sc-parent</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>pom</packaging>      <!-- 继承Spring Boot的默认值 -->   <parent>       <groupId>org.springframework.boot</groupId>       <artifactId>spring-boot-starter-parent</artifactId>       <version>2.1.6.RELEASE</version>       <relativePath /> <!-- lookup parent from repository -->   </parent>      <properties>    <!-- 降低maven-jar-plugin插件版本,防止版本不匹配导致的pom.xml第一行报错 -->    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>   </properties>      <dependencies>        <!-- 添加web应用依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>   </dependencies>      <dependencyManagement>        <dependencies>            <!-- SpringCloud依赖 -->            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>Greenwich.SR2</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>   </dependencyManagement>      <build>        <plugins>               <!-- 打可执行jar包插件 -->               <plugin>                   <groupId>org.springframework.boot</groupId>                   <artifactId>spring-boot-maven-plugin</artifactId>               </plugin>                              <!-- 指定编译插件使用的jdk版本 -->               <plugin>                    <groupId>org.apache.maven.plugins</groupId>                    <artifactId>maven-compiler-plugin</artifactId>                    <configuration>                        <source>1.8</source>                        <target>1.8</target>                    </configuration>                </plugin>        </plugins>   </build></project>搭建注册中心1.在父模块下创建子模块项目sc-eureka,pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <parent>    <groupId>com.cf</groupId>    <artifactId>sc-parent</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <artifactId>sc-eureka</artifactId>    <dependencies>    <!-- Eureka服务端依赖 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>    </dependency>  </dependencies></project>2.创建启动类eureka.EurekaApplication:package eureka;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;//声明该类为SpringBoot服务的入口@SpringBootApplication//声明该微服务为注册中心,提供服务发现和注册的功能@EnableEurekaServerpublic class EurekaApplication {    public static void main(String[] args) {        SpringApplication.run(EurekaApplication.class, args);    }}3.创建配置文件/src/main/resources/application.yml:server:  port: 8080 #当前服务端口eureka:  instance:    hostname: localhost #当前Eureka实例主机名  client:    registerWithEureka: false #表示不向注册中心注册自己    fetchRegistry: false #表示此客户端不需要从Eureka注册中心获取Eureka注册表信息    serviceUrl:      defaultZone: http://localhost:8080/eureka/ ##eureka对外提供的地址(客户端连接的地址)
其他配置信息可以参考EurekaInstanceConfigBean和EurekaClientConfigBean两个配置类
4.运行启动类EurekaApplication,在浏览器中访问http://localhost:8080/,出现如下图表示注册中心搭建成功:
提供者与服务注册1.在父模块下创建子模块项目sc-provider,pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <parent>    <groupId>com.cf</groupId>    <artifactId>sc-parent</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <artifactId>sc-provider</artifactId>    <dependencies>    <!-- Eureka客户端依赖,用于连接服务端进行服务注册和发现 -->    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>    </dependency>  </dependencies></project>2.创建启动类provider.ProviderApplication:package provider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ProviderApplication {    public static void main(String[] args) {        SpringApplication.run(ProviderApplication.class, args);    }}3.创建Controller:provider.controller.BookControllerpackage provider.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RequestMapping("/book")@RestControllerpublic class BookController {        @GetMapping("/list")    public String getBookList(){        //模拟从service返回数据        return "[\"Java入门到放弃\",\"C++入门到放弃\",\"Python入门到放弃\",\"C入门到放弃\"]";    }}4.创建配置文件/src/main/resources/application.yml:server:  port: 8081spring:  application:    name: sc-provider #注册到Eureka注册中心上的服务名称,对应Eureka界面上的Application列    eureka:  client:    serviceUrl:      defaultZone: http://localhost:8080/eureka/ #注册中心的访问地址  instance:    preferIpAddress: true #表示将自己的IP注册到Eureka注册中心。默认为false,表示将hostname注册到注册中心5.依次启动注册中心sc-eureka和提供者sc-provider,当提供者启动时,会将自己的信息注册到Eureka注册中心,在浏览器中访问http://localhost:8080/,提供者sc-provider已经在注册中心注册。
消费者和服务发现1.在父模块下创建子模块项目sc-consumer-discovery,pom.xml:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <parent>    <groupId>com.cf</groupId>    <artifactId>sc-parent</artifactId>    <version>0.0.1-SNAPSHOT</version>  </parent>  <artifactId>sc-consumer-discovery</artifactId>    <dependencies>    <dependency>        <groupId>org.springframework.cloud</groupId>        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>    </dependency>  </dependencies></project>2.创建启动类consumer.ConsumerDiscoveryApplication:package consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.web.client.RestTemplate;@SpringBootApplicationpublic class ConsumerDiscoveryApplication {    public static void main(String[] args) {        SpringApplication.run(ConsumerDiscoveryApplication.class, args);    }        @Bean    public RestTemplate restTemplate(){        return new RestTemplate();    }}3.创建调用提供者服务的Controller:consumer.controller.ConsumerDiscoveryControllerpackage consumer.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@RestControllerpublic class ConsumerDiscoveryController {    @Autowired    private DiscoveryClient discoveryClient;        @Autowired    private RestTemplate restTemplate;        @GetMapping("/getBookList")    public String getBookList(){        //通过服务名获取实例信息        List<ServiceInstance> list = discoveryClient.getInstances("sc-provider");        if (list != null && list.size() > 0 ) {            //调用服务,并返回服务结果            return restTemplate.getForObject(list.get(0).getUri() + "/book/list", String.class);        }        return null;    }}4.创建application.yml:server:  port: 8082spring:  application:    name: sc-consumer-discovery    eureka:  client:    registerWithEureka: false #在本实例中消费者不提供服务,所以无需到注册中心注册。在实际应用中,消费者也可能是提供者。    serviceUrl:      defaultZone: http://localhost:8080/eureka/5.依次启动注册中心sc-eureka、提供者sc-provider、消费者sc-consumer-discovery,当消费者启动时,会从注册中心查询可用的服务列表及其网络地址。直接访问提供者和消费者调用提供者结果如下:

2 个回复

倒序浏览
有任何问题欢迎在评论区留言
回复 使用道具 举报
或者添加学姐微信
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马