Spring Cloud Eureka 注册中心

一、服务注册与发现
    使用 Eureka 来充当 注册中心 ,  
    在 Eureka 单机版,这时需要把registerWithEureka(是否注册到其他Eureka上)/ fechRegistry(是否与其他Eureka数据同       步)改成 false
    在 Eureka 集群中 ,需要相互注册  ,这时需要把 registerWithEureka / fechRegistry 改成 true

    在消费者 和 生成者 的启动类上:
        @EnableDiscoveryClient启用 Eureka 发现服务项,可以支持其他发现组件 
        @EnableEurekaClient 只支持Eureka

二、Eureka自我保护    
    当你在 Eureka 可视化界面上看到一段红字 如下:
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE     LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    表示 Eureka启动自我保护模式,这是 节点失效 后 , Eureka 不会踢脚无效服务。当eureka 注册中心启动时,会向相邻节点获取     所有实例注册表信息。
    eureka:
      server:
        # false 关闭自我保护,不管如何都要剔除心跳检测异常的服务
        enableSelfPreservation: false
        ## 主动失效检测间隔,配置成5秒
        evictionIntervalTimerInMs: 4000

三、代码如下:

 1、注册中心启动类

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

	private static  final Logger logger = LoggerFactory.getLogger(EurekaServerApplication.class);
	
    public static void main(String[] args) throws Exception {
    	final ApplicationContext  applicationContext  =  SpringApplication.run(EurekaServerApplication.class, args);
    	
    	Environment environment = applicationContext.getEnvironment();
    	 
        logger.info("\n---------------------------------\n\t"
                        +"Application '{}' is running! Access URLS: \n\t "+ "Local: \t\thttp://localhost:{}\n\t"
                        +"External:\thttp://{}:{}\n---------------------------------", 
                        environment.getProperty("spring.application.name"),
        environment.getProperty("server.port"), InetAddress.getLocalHost().getHostAddress(),environment.getProperty("server.port"));
    }
    
}

2、application.yml

server:
  port: 8002

spring:
  application:
    name: eureka-server
  cloud:
    server:
      ipAddress:192.168.59.10
eureka:
  instance:
    # 默认使用主机名,不可使用ip,   eureka.instance.perferIpAddress: true  可以使用IP进行注册
    hostname: master
    preferIpAddress: false
    ## 心跳间隔,5秒
    leaseRenewalIntervalInSeconds: 5
    ## 没有心跳的淘汰时间,10秒
    leaseExpirationDurationInSeconds: 30
  client:
    #由于该应用为注册中心,所以设置为 false,代表不向注册中心注册自己
    registerWithEureka: true
    #是否拉取信息
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:8000/eureka/,http://${eureka.instance.hostname}:8001/eureka/
  server:
    # false 关闭自我保护,不管如何都要剔除心跳检测异常的服务
    enableSelfPreservation: false
    ## 主动失效检测间隔,配置成5秒
    evictionIntervalTimerInMs: 4000

3、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.springCloud.eureka</groupId>
  <artifactId>SpringCloudEureka</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>SpringCloudEureka</name>
  <url>http://maven.apache.org</url>


	<parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.5.9.RELEASE</version>
       <relativePath/> <!-- lookup parent from repository -->
   </parent>

   <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>Edgware.RELEASE</spring-cloud.version>
   </properties>

   <dependencies>
 	   <!-- spring-cloud-starter-eureka-server用于Eureka的服务注册 -->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-eureka-server</artifactId>
       </dependency>
       <!-- spring-cloud-starter-config 用于配置管理(比如对bootstrap.yml和application.yml等统一管理)。 -->
	   <dependency>
		   <groupId>org.springframework.cloud</groupId>
		   <artifactId>spring-cloud-starter-config</artifactId>
	   </dependency>
	    <!--用于测试的,本例可省略-->
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>
       <!-- spring-boot-starter-actuator 管理工具/web 查看堆栈,动态刷新配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
   </dependencies>
	   
	<!--依赖管理,用于管理spring-cloud的依赖-->
	<!--spring-cloud-starter-parent ????-->
	<!--spring-cloud-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>

四、打包发布

使用maven打包成jar,2>&1 表示 所有输出 , 最后的& 表示后台运行

java -jar xxxxxx.jar > log.file 2>&1 &

也可以指定配置文件后缀启动,这是配置文件为 application-test.yml

java -jar xxxxxx.jar --spring.profiles.active=test

五、常见问题

 1、消费者是用restTemplate

    RestTemplate  要使用 数组  而不是  List

    //这么写会报错
    List<T>  list = this.restTemplate.getForObject("http:// xxxxx",List.class);
    
    // 没问题
    T[ ]  array = this.restTemplate.getForObject("http:// xxxxx",T[ ].class);
    List<T> list = Arrays.asList(array);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值