1.服务注册和发现eureka

可以用作服务治理。

2.首先我们建立一个父子工程

最外层是forezp

其下面建立四个子工程

  • eureka-server
  • eureka-client
  • eureka-client1
  • eureka-ribbon-client

3.forezp工程相关

1.forezp pom文件如下

<?xml version="1.0" encoding="utf-8"?>
<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>org.springframework.boot</groupid>
      <artifactid>spring-boot-starter-parent</artifactid>
      <version>2.1.5.release</version>
      <relativepath/> <!-- lookup parent from repository -->
   </parent>
   <groupid>com.example</groupid>
   <artifactid>forezp</artifactid>
   <version>0.0.1-snapshot</version>
   <name>forezp</name>
   <description>demo project for spring boot</description> 
 
   <properties>
      <project.build.sourceencoding>utf-8</project.build.sourceencoding>
      <project.reporting.outputencoding>utf-8</project.reporting.outputencoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>dalston.sr1</spring-cloud.version>
   </properties> 
 
   <dependencymanagement>
      <dependencies>
         <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-dependencies</artifactid>
            <version>${spring-cloud.version}}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencymanagement> 
 
   <modules>
      <module>euraka-client</module>
      <module>euraka-server</module>
      <module>eureka-ribbon-client</module>
      <module>euraka-client2</module>
   </modules> 
 
   <!--<build>-->
      <!--<plugins>-->
         <!--<plugin>-->
            <!--<groupid>org.springframework.boot</groupid>-->
            <!--<artifactid>spring-boot-maven-plugin</artifactid>-->
         <!--</plugin>-->
      <!--</plugins>-->
   <!--</build>--> 
 
</project>

4.eureka的服务中心:eureka-server相关

1.pom文件

<?xml version="1.0" encoding="utf-8"?>
<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.example</groupid>
      <artifactid>forezp</artifactid>
      <version>0.0.1-snapshot</version>
      <relativepath/> <!-- lookup parent from repository -->
   </parent>
   <groupid>com.example</groupid>
   <artifactid>euraka-server</artifactid>
   <version>0.0.1-snapshot</version>
   <name>euraka-server</name>
   <description>demo project for spring boot</description> 
 
   <properties>
      <java.version>1.8</java.version>
      <spring-cloud.version>greenwich.sr1</spring-cloud.version>
   </properties> 
 
   <dependencies>
      <dependency>
         <groupid>org.springframework.cloud</groupid>
         <artifactid>spring-cloud-starter-netflix-eureka-server</artifactid>
      </dependency> 
 
      <dependency>
         <groupid>org.springframework.boot</groupid>
         <artifactid>spring-boot-starter-test</artifactid>
         <scope>test</scope>
      </dependency>
   </dependencies> 
 
   <dependencymanagement>
      <dependencies>
         <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-dependencies</artifactid>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencymanagement> 
 
   <build>
      <plugins>
         <plugin>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-maven-plugin</artifactid>
         </plugin>
      </plugins>
   </build> 
 
</project>

2.application.properties文件

server.port=8761 
eureka.instance.hostname=localhost
 
#防止自己注册自己
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#eureka的注册地址
eureka.client.service-url.default-zone=http://${eureka.instance.hostname}:${server.port}/eureka/}

3.需要在启动类添加 @enableeurekaserver 注解来开启注册服务

package com.example.eurakaserver;  
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.cloud.netflix.eureka.server.enableeurekaserver; 
 
@springbootapplication
@enableeurekaserver
public class eurakaserverapplication {  
   public static void main(string[] args) {
      springapplication.run(eurakaserverapplication.class, args);
   }  
}

5.eureka-client和eureka-client1用来提供服务

这两个子工程其实区别不大,只是为了验证实现负载均衡。

1.pom文件

<?xml version="1.0" encoding="utf-8"?>
<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.example</groupid>
        <artifactid>forezp</artifactid>
        <version>0.0.1-snapshot</version>
        <relativepath/> <!-- lookup parent from repository -->
    </parent>
    <groupid>com.example</groupid>
    <artifactid>euraka-client2</artifactid>
    <version>0.0.1-snapshot</version>
    <name>euraka-client2</name>
    <description>demo project for spring boot</description>
 
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>greenwich.sr1</spring-cloud.version>
    </properties>
 
    <dependencies>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-web</artifactid>
        </dependency>
        <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
        </dependency>
 
        <dependency>
            <groupid>org.projectlombok</groupid>
            <artifactid>lombok</artifactid>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-starter-test</artifactid>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <dependencymanagement>
        <dependencies>
            <dependency>
                <groupid>org.springframework.cloud</groupid>
                <artifactid>spring-cloud-dependencies</artifactid>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencymanagement>
 
    <build>
        <plugins>
            <plugin>
                <groupid>org.springframework.boot</groupid>
                <artifactid>spring-boot-maven-plugin</artifactid>
            </plugin>
        </plugins>
    </build>
 
</project>

2.新建一个apicontroller类

package com.example.eurakaclient2;  
import org.springframework.beans.factory.annotation.value;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller; 
 
@restcontroller
public class apicontroller { 
 
    @value("${server.port}")
    string port;
    @getmapping("/hi")
    public string home(@requestparam string name1){
        return "hi "+name1+"i am a port:"+port;
    }
}

3.eureka-client 的 apllication.properties配置如下

eureka.client.service-url.defaultzone=http://localhost:8761/eureka/
server.port=8762
spring.application.name=eureka-client

4.eureka-client2的 apllication.properties配置如下

eureka.client.service-url.defaultzone=http://localhost:8761/eureka/
server.port=8763
spring.application.name=eureka-client

5.需要在启动类添加注解 @enableeurekaclient,开启服务提供

package com.example.eurakaclient2;  
import org.springframework.boot.springapplication;
      import org.springframework.boot.autoconfigure.springbootapplication;
      import org.springframework.cloud.netflix.eureka.enableeurekaclient; 
 
@springbootapplication
@enableeurekaclient
public class eurakaclient2application {  
   public static void main(string[] args) {
      springapplication.run(eurakaclient2application.class, args);
   } 
}

6.eureka-ribbon-client工程相关

1.pom文件

<?xml version="1.0" encoding="utf-8"?>
<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.example</groupid>
      <artifactid>forezp</artifactid>
      <version>0.0.1-snapshot</version>
      <relativepath/> <!-- lookup parent from repository -->
   </parent>
   <groupid>com.example</groupid>
   <artifactid>eureka-ribbon-client</artifactid>
   <version>0.0.1-snapshot</version>
   <name>eureka-ribbon-client</name>
   <description>demo project for spring boot</description> 
 
   <properties>
      <java.version>1.8</java.version>
      <spring-cloud.version>greenwich.sr1</spring-cloud.version>
   </properties> 
 
   <dependencies>
      <dependency>
         <groupid>org.springframework.boot</groupid>
         <artifactid>spring-boot-starter-web</artifactid>
      </dependency>
      <dependency>
         <groupid>org.springframework.cloud</groupid>
         <artifactid>spring-cloud-starter-netflix-ribbon</artifactid>
      </dependency> 
 
      <dependency>
         <groupid>org.springframework.cloud</groupid>
         <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
      </dependency> 
 
      <dependency>
         <groupid>org.projectlombok</groupid>
         <artifactid>lombok</artifactid>
         <optional>true</optional>
      </dependency>
      <dependency>
         <groupid>org.springframework.boot</groupid>
         <artifactid>spring-boot-starter-test</artifactid>
         <scope>test</scope>
      </dependency>
   </dependencies> 
 
   <dependencymanagement>
      <dependencies>
         <dependency>
            <groupid>org.springframework.cloud</groupid>
            <artifactid>spring-cloud-dependencies</artifactid>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
         </dependency>
      </dependencies>
   </dependencymanagement> 
 
   <build>
      <plugins>
         <plugin>
            <groupid>org.springframework.boot</groupid>
            <artifactid>spring-boot-maven-plugin</artifactid>
         </plugin>
      </plugins>
   </build> 
 
</project>

2.applicaiton.properties配置文件如下

spring.application.name=eureka-ribbon-client
server.port=8764
eureka.client.service-url.defaultzone=http://localhost:8761/eureka/

3.新建ribbonconfig类,在这里注入resttemplate类同时开启负载均衡

package com.example.eurekaribbonclient;  
import org.springframework.cloud.client.loadbalancer.loadbalanced;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.web.client.resttemplate; 
 
@configuration
public class ribbonconfig { 
 
    @bean
    @loadbalanced
    resttemplate resttemplate(){
        return new resttemplate();
    }
}

4.新建service层,调用eureka-client (eureka-client1)提供的restful接口,其中 eureka-client 为  eureka-client (eureka-client1)注册在 eureka-service上的serviceid信息,如果没有配置serviceid,默认使用spring.application.name

package com.example.eurekaribbonclient;  
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;
import org.springframework.web.client.resttemplate;  
 
    @service
    public class ribbonservice {
        @autowired
    resttemplate resttemplate;
    public string hi(string name){  
        return resttemplate.getforobject("http://eureka-client/hi?name1="+name,string.class);
    }
}

5.新建controller层,调用ribbonservice为我们提供的方法

package com.example.eurekaribbonclient;  
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.getmapping;
import org.springframework.web.bind.annotation.requestparam;
import org.springframework.web.bind.annotation.restcontroller; 
 
@restcontroller
public class ribboncontroller {
    @autowired
    ribbonservice ribbonservice; 
 
    @getmapping("/hi")
    public string hi(@requestparam(required = false,defaultvalue = "forezp")string name){
        return ribbonservice.hi(name);
    }
}

6.同时也需要在启动类添加@enableeurekaclient注解

package com.example.eurekaribbonclient;  
import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.cloud.netflix.eureka.enableeurekaclient; 
 
@springbootapplication
@enableeurekaclient
public class eurekaribbonclientapplication { 
 
   public static void main(string[] args) {
      springapplication.run(eurekaribbonclientapplication.class, args);
   }  
}

7.验证

1.按照顺序启动工程

2.浏览器访问  http://localhost:8761/

可以看到eureka-client 和 eureka-ribbon-client已经注册进来了 

3.我们访问 http://localhost:8764/hi?name=forezp 两次

可以看到  页面分别返回

hi forezpi am a port:8762

hi forezpi am a port:8763

这样验证了我们实现了负载均衡。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。