SpringCloud-笔记2-Eureka Client项目创建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud-笔记2-Eureka Client项目创建相关的知识,希望对你有一定的参考价值。

参考技术A File/New/Module

有时spring网站无法访问时,我们可以把https->改为http

一路next到finsh

选择pom.xml文件/

Multiple Spring Boot run configurations were detected. Run Dashboard allows to manage multiple run configurations at once. Show run configurations in Run Dashboard Do not show again for this project

显示Run Dashboard

问题2

Failed to read artifact descriptor for org.springframework.cloud:spring-cloud-starter-netflix-eureka-client:jar:2.1.2.RELEASE

到moven仓库查看版本 https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client

日志打印可看到是注册上去了

可在eureka后台看不到Client的注册实例信息

可以看到成功注册上来了

工程的pom.xml文件加入

工程的运行类添加注解

在application.yml添加注册配置

运行wechatTask-guns项目

访问

springcloud笔记三注册中心eurekazookeeperconsul

一、eureka

1.服务端

pom文件

添加eureka-server

		<!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

yaml文件

# eureka集群互相注册
server:
  port: 7002
#eureka:
#  instance:
#    hostname: eureka7002.com
#  client:
#    register-with-eureka: false
#    fetch-registry: false
#    com.fox.springcloud.service-url:
#      defaultzone: http://eureka7001.com:7001/eureka/
eureka:
  instance:
    hostname: eureka7002.com
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/
  server:
    enable-self-preservation: false
    eviction-interval-timer-in-ms: 20000

启动类

添加@EnableEurekaServer注解

2.客户端(服务注册+restTemplate)

pom文件

添加eureka-client maven坐标

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

yaml文件

eureka:
  client:
    register-with-eureka: true
    service-url:
#      defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
    fetch-registry: true
  instance:
    instance-id: payment8001
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 10
    lease-expiration-duration-in-seconds: 30

启动类

添加@EnableEurekaClient、@EnableDiscoveryClient注解

备注:@EnableEurekaClient只适用于使用Eureka作为注册中心的场景,@EnableDiscoveryClient可以适用于其他注册中心的场景比如nacos等。

调用远程服务

使用服务名代替服务提供者的ip端口调用

获取注册中心的服务

@Resource
private DiscoveryClient discoveryClient;

可以通过discoveryClient获取注册中心的服务和对应的instances

3.客户端(openfeign)

pom文件

添加eureka-client和openfeign

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

yaml文件

eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
feign:
  client:
    config:
      default:
        ReadTimeout: 5000
        ConnectTimeout: 5000

启动类

添加@EnableFeignClients注解

调用远程服务

PaymentFeignService中的服务名和接口路径要和服务提供者一致,项目中注入PaymentFeignService即可调用

@Component
@FeignClient("PAYMENT-SERVICE")
public interface PaymentFeignService {
    @GetMapping("/payment/lb")
    public String getPaymentLB();

    @GetMapping("/payment/timeout")
    public String getTimeout();
}

二、zookeeper

1.zookeeper服务端安装

下载zookeeper

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz

zookeeper安装后要注意检查防火墙是否关闭

查看防火墙状态
systemctl status firewalld.service
关闭防火墙
systemctl stop firewalld.service

java项目连接zookeeper时要注意和服务器版本一致。

进入bin目录下,启动zookeeper

./zkServer.sh start
连接zookeeper
./zkCli.sh

2.客户端(服务注册调用)

pom文件

		<!--SpringBoot整合Zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <exclusions>
                <!--先排除自带的zookeeper3.5.3-->
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--添加zookeeper3.5.9版本-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.9</version>
        </dependency>

yaml文件

spring:
  application:
    # 服务别名---注册zookeeper到注册中心的名称
    name: cloud-provider-payment
  cloud:
    zookeeper:
      # 默认localhost:2181
      connect-string: 192.168.137.200:2181

启动类

添加@EnableDiscoveryClient注解

调用远程服务

通过服务名代替ip端口

zookeeper节点类型

1、PERSISTENT--持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

在这里插入图片描述

三、consul

1.consul服务端安装

consul下载安装官网写的非常详细https://www.consul.io/downloads

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul

查看是否安装成功

consul -version

在这里插入图片描述
启动consul

window启动
consul agent dev
centos启动(0.0.0.0允许远程访问)
consul agent -dev -client 0.0.0.0 -ui &
查看进程是否启动成功
netstat -anp|grep 8500
查看Consul集群的成员
consul members

在这里插入图片描述

2.客户端(服务注册调用)

pom文件

添加consul-discovery

		<!--SpringCloud consul-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
        </dependency>

yaml文件

spring:
  application:
    # 服务别名---注册consul到注册中心的名称
    name: cloud-provider-payment
  cloud:
    consul:
      host: 192.168.137.200
      port: 8500
      discovery:
        service-name: ${spring.application.name}

启动类

添加@EnableDiscoveryClient注解

调用远程服务

通过服务名代替ip端口

3.使用过程中遇到的问题

问题一、注册服务提供者连接不上consul

使用telnet ip端口报错

telnet: connect to address 192.168.137.200: No route to host

查看防火墙状态

firewall-cmd --state

发现防火墙是running状态,关闭防火墙,再telnet成功

service firewalld stop

问题二、consul中服务健康状态为unhealth

页面显示叉
在这里插入图片描述

点进去
在这里插入图片描述

通过output信息判断可能是使用了服务运行时的主机名,查看主机名确实是DESKTOP-JOKG37G

127.0.0.1 DESKTOP-JOKG37G

原因是springcloud服务注册到consul的是主机名,consul所在的服务器不能识别该主机名导致

解决方法:

一、在consul服务器/etc/hosts文件中配置主机名映射到Springcloud服务ip

二、指定注册到consul的ip地址spring.cloud.consul.discovery.hostname

spring:
  application:
    name: cloud-consumer-order
  cloud:
    consul:
      host: 192.168.137.200
      port: 8500
      discovery:
        hostname: 192.168.137.166
        service-name: ${spring.application.name}

以上是关于SpringCloud-笔记2-Eureka Client项目创建的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud学习--- Eureka

springcloud组件-eureka

SpringCloud系列服务注册中心Eureka基础

springCloud - Eureka

SpringCloud学习之整合eureka

实用篇SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud分布式