一 、spring could 微服务之 - Eureka

感谢大佬 “纯洁的微笑”,没少读大佬的文章,传道解惑方为真牛!

         Eureka其实就是个服务注册中心,他的主要功能就是所有的微服务小弟要上岗之前,都来Eureka这里做一个注册,登记,然后Eureka大哥就知道每个小弟都是做什么的,在哪个地址可以找到,然后如果有的小弟需要什么服务也来这里,然后Eureka大哥告诉小弟需要的服务在什么地址。

        微服务的主要目的就是每个服务崩了不影响别人,但是如果Eureka也崩了呢?所以单点还是很危险的,好在Eureka也可以相互注册,我们Eureka中心点至少做三个以上,这样才不会半夜起来加班。崩一个还可以撑到天亮。

         还有一个问题就是,因为我用idea的编辑器,如果做微服务,一个微服务打开一个窗口,太麻烦了切过来切过去的,所以我们尝试一下,开启Run Dashboard管理 :

Run Dashboard 管理

 1、找到workspace.xml

 找到 RunDashboard节点,如果没有直接粘贴下面代码进去,然后重启idea

  <component name="RunDashboard">
    <option name="configurationTypes">
      <set>
        <option value="SpringBootApplicationConfigurationType" />
      </set>
    </option>
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>

这里可以查所有的版本对应:

点击这里查询 

网上说的是直接加上:

<dependencies>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.cloud</groupId>
		<artifactId>spring-cloud-starter-eureka-server</artifactId>
	</dependency>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
		<scope>test</scope>
	</dependency>
</dependencies>

但是加上老是找不到,爆红,网上说的是没有加版本号,但是加了也不行,看了报错:

Could not find artifact org.springframework.cloud:spring-cloud-starter-netflix-eureka-server:pom:2.2.1 in alimaven (http://maven.aliyun.com/nexus/content/groups/public/)

可能是  repository   仓库里没有,换个仓库试下。报这样的错误就两种可能,一个是仓库里没有这个版本号,另一个是仓库里整个都没有。

然后到现在我都没有解决.......

但是把maven 的setting.xml 改成这样,这是国内最快的maven仓库:

<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云谷歌仓库</name>
        <url>https://maven.aliyun.com/repository/google</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云阿帕奇仓库</name>
        <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云spring仓库</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云spring插件仓库</name>
        <url>https://maven.aliyun.com/repository/spring-plugin</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云grails-core</name>
        <url>https://maven.aliyun.com/repository/grails-core</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云gradle-plugin</name>
        <url>https://maven.aliyun.com/repository/gradle-plugin</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云mapr-public</name>
        <url>https://maven.aliyun.com/repository/mapr-public</url>
    </mirror>
</mirrors>

后面的解决方案是:



        <dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
			<version>1.4.2.RELEASE</version>
		</dependency>



	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Hoxton.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

把这两个加进去,就好了,版本的话,就用上面那个查一下,版本对上。

2、添加启动代码中添加@EnableEurekaServer注解

3、配置文件

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,在application.properties添加以下配置:

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

但是出了这样的问题:

 百度结果说版本不同,果然换了最新的版本就好了!!还是要好好看那个版本对应,springboot最恶心的地方就是版本对应。

然后运行程序:

  • eureka.client.register-with-eureka :表示是否将自己注册到Eureka Server,默认为true。
  • eureka.client.fetch-registry :表示是否从Eureka Server获取注册信息,默认为true。
  • eureka.client.serviceUrl.defaultZone :设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。

启动工程后,访问:http://localhost:8012/,可以看到下面的页面,其中还没有发现任何服务

 这是因为就一个 Eureka 服务,再加几个我们试试。

出现这种问题就是因为只有一个服务,他自己的保护机制,我们再添加几个服务,晚上吧,要吃饭了 。

现在是第二天,哈哈,家里装修,开干!

idea里直接加一个模块就在项目地下了还挺方便,忽略红线,红线是因为pom里面没有加jar包,现在去改,还有一个问题,总项目里的pom.xml所引入的jar不能共享吗?

so,我们现在学习多模块!

大神的多模块学习!这个是多模块的,我们暂时先看下不用,因为我们需要单独启动每个模块,所以暂时先分割开,后面再学习,但是先说一下这个的感悟

---感觉其实就是总项目是parent,其他的对他做个依赖,在pom文件做个声明,然后后面就打包什么的也在里面了。哎,自学就这点不好,东西不系统,用到什么学什么,也学到最后最难的都用过,最简单的却叫不上名字。

我们现在每个项目模块分开写,分开启动。

现在是这样启动了三个项目,但是每个项目都没有相互注册,我们现在让她们相互注册。

--
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer1
server:
  port: 8000
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8001/eureka/,http://peer3:8002/eureka/
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer2
server:
  port: 8001
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer3:8002/eureka/
---
spring:
  application:
    name: spring-cloud-eureka
  profiles: peer3
server:
  port: 8002
eureka:
  instance:
    hostname: peer3
  client:
    serviceUrl:
      defaultZone: http://peer1:8000/eureka/,http://peer2:8001/eureka/

如果不是  .yml文件,可以用下面的,反正两个相同的就是 · 变成 = :


spring.application.name=spring-cloud-eureka-server-3
spring.profiles.active =peer3

server.port=8013
eureka.instance.hostname =peer3
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://peer2:8012/eureka/,http://peer1:8011/eureka/

这还有个详细的配置:

spring:
  application:
    name: eureka-server
  profiles: dev
server:
#  port: ${port:8761}
  port: 8761
eureka:
  instance:
    # 实例id
    instance-id: ${spring.application.name}-${port:8761}-${random.value}
    # 服务名称,不配置的话取spring.application.name
    appname: eureka-server
    # 主机名,不配置的话根据操作系统的主机名来获取,
    # 单机配置集群一定要配置,多台机器不用配置,默认会从系统中取
    hostname: ${HOSTNAME}
    # 发送心跳的间隔时间,默认30
    lease-renewal-interval-in-seconds: 5
    # 等待心跳包的时间上限,默认90
    lease-expiration-duration-in-seconds: 10
    # 在配置集群eureka时不能设置为true,默认为false,若为ture,eureka分片会显示不可用--->unavailable-replicas
    prefer-ip-address: false
  client:
    # 从是否从注册中心中获取注册信息,集群模式下,配置为true
    fetch-registry: true
    # 是否将自身注册到注册中心,集群模式下配置为true
    register-with-eureka: true
    service-url:
      # 与服务端通信的地址
      defaultZone: ${EUREKA_SERVER_URL}/eureka/
    # 将健康检查委托给actuator维护,默认为true
    healthcheck:
      enabled: true
  server:
#     是否开启保护模式,开发环境建议为false,默认为true
    enable-self-preservation: false
    #当eureka服务器启动时获取其他服务器的注册信息失败时,会再次尝试获取,期间需要等待的时间,默认为30 * 1000毫秒
    registry-sync-retry-wait-ms: 500
    eviction-interval-timer-in-ms: 30000
    # 集群里eureka节点的变化信息更新的时间间隔,单位为毫秒,默认为10 * 60 * 1000
    peer-eureka-nodes-update-interval-ms: 30000

但是配置完启动变成了这样,我感觉是eureka 端口的问题

但是注册中心一直都是8080 最后的原因是:

改成:

 好吧,继续翻山。

 最后运行各个服务,效果截图如下:

 但是点击 peer3却访问不到 locahost:8013,访问的是peer3:8013。这还是个坑一,还有就是发现了相邻的节点,但是却没有相互注册,所以,这可能是坑一的原因。

DS Replicas 是相邻的节点,发现了集群中其他的节点

Instance currently registered with eureka  意思是注册的节点,这个现在没显示,所以这个有问题。

 笨死了,就是地址要写  /eureka/ 

要这样写:

spring:
  datasource:

    url: jdbc:mysql://localhost:3306/mdy
    username: root
    password: root
    driverClassName: com.mysql.jdbc.Driver
  application:
    name: spring-cloud-eureka
  profiles:
    active: peer2

server:
  port: 8012
eureka:
  instance:
    hostname: peer2
  client:
    register-with-eureka: true
    fetch-registry: true
    serviceUrl:
      defaultZone: http://peer1:8011/eureka/,http://peer3:8013/eureka/

并且在C:\Windows\System32\drivers\etc中的host文件底部加上

127.0.0.1    peer1    分别对应两个Eureka的instance的hostname,
127.0.0.1    peer2

 最终是这样;

这样 eureka 就完成了,所有的坑都在上面。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值