SpringCloud环境搭建 --服务治理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxy540843763/article/details/83243555

服务注册发现

EUREKA

Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来。
Eureka包含了服务器端和客户端组件。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。
客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。

搭建步骤:

  • 1.依赖引入,见以下POM.xml(略去不重要的部分)
<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-web</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>
  • 2.启动类添加注解: @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class DorEurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(DorEurekaApplication.class, args);
    }
}
  • 3.修改配置文件。
spring:
  application:
    # 指定应用的名称
    name: doraemon-eureka
server:
  port: ${eureka_port:8761}   #指定端口 

这样的话,一个最最简单的Eureka搭建完毕。
启动Eureka,在浏览器中输入:http://127.0.0.1:8761/,就可以访问到eureka的页面。
eureka启动页面注意
Eureka还有很多自定义的配置,以后在记录。

问题1
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server…

集群搭建

  • 1.新建三个配置文件,分别命名为:application-peer1,2,3
    application-peer1.yml:
spring:
  application:
    # 指定应用的名称
    name: doraemon-eureka
server:
  port: ${eureka_port:8761}
eureka:
  instance:
    hostname: doreamon-eureka-peer1
  client:
    service-url:
      defaultZone: http://${peer2:eureka-peer2}:8762/eureka/,http://${peer3:eureka-peer3}:8763/eureka/

application-peer2.yml:

spring:
  application:
    # 指定应用的名称
    name: doraemon-eureka
server:
  port: ${eureka_port:8762}
eureka:
  instance:
    hostname: doreamon-eureka-peer2
  client:
    service-url:
      defaultZone: http://${peer1:eureka-peer1}:8761/eureka/,http://${peer3:eureka-peer3}:8763/eureka/

application-peer3.yml:

spring:
  application:
    # 指定应用的名称
    name: doraemon-eureka
server:
  port: ${eureka_port:8763}
eureka:
  instance:
    hostname: doreamon-eureka-peer3
  client:
    service-url:
      defaultZone: http://${peer1:eureka-peer1}:8761/eureka/,http://${peer2:eureka-peer2}:8762/eureka/
  • 2.修改机器的hosts文件,添加
127.0.0.1 eureka-peer1
127.0.0.1 eureka-peer1
127.0.0.1 eureka-peer1

3.然后使用mvn clean package打包,分别运行java -jar启动三个实例。

java -jar dor-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar dor-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
java -jar dor-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3

启动后的eureka
这样eureka就是有是哪个实例在运行了。同样的eureka还有很多详细配置。。。。

但从上面的例子当中,我们可以知道:
Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。
所以,如果存在多个节点,我们只需要将节点之间两两连接起来,形成通路,那么他们之间的所有服务都可以共享.
我们的服务只需要向集群中的任意一个注册中心中注册,即可被所有注册中心所共享,任意一个注册中心崩溃,都不会影响这个服务被调用。

docker部署

方式一

修改pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--指定镜像的名称-->
                    <imageName>${project.artifactId}:${project.version}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <forceTags>true</forceTags>
                    <!--那些需要和Dockerfile放在一起,在构建镜像时使用的文件,一般应用 jar 包需要纳入-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件,${project.build.finalName}.jar指的是打包后的jar包文件。-->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>

然后在src/main/目录下新建目录docker,新建一个文件:Dockerfile
内容如下:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD dor-eureka-0.0.1-SNAPSHOT.jar app.jar
RUN chmod 755 /app.jar
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

可以选择自己喜欢的镜像。
存在一个问题:就是打好的jar名称写死了,如果我更换了版本,还需要来修改Dockerfile。

方式二:

还有可以把打包的过程写到pom.xml文件中,但是我还没有搞清楚怎么写,之前写的打包失败了。等我搞清楚,再来补充

参考文章

(翟永超)Spring Cloud源码分析(一)Eureka

猜你喜欢

转载自blog.csdn.net/wxy540843763/article/details/83243555