eureka

学习eureka笔记

eureka就是一个spring cloud的一个组件,是负责服务的上传和调用的。也就是说我们可以将一个服务注册到eureka上去,其他的服务想去调用被注册服务的功能就可以去通过eureka代理获得这个服务。

1.服务提供者:

​ 提供服务的项目

2.服务调用者:

​ 调用提供者功能的项目

3.心跳

eureka通过心跳来判断这个项目是否挂掉了
搭建spring boot项目
1.搭建一个空项目。
2.在这个空项目中添加三个模块。分别为服务的提供者,调用者和eureka注册中心。
3.eureka注册中心添加相关依赖
<?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>
             
<!--项目的名称-->             
    <groupId>org.example</groupId>
    <artifactId>EurekaServer</artifactId>
    <version>1.0-SNAPSHOT</version> 
<!--上面是自动生成的不用改-->
<!--添加spring boot父工程里面都是一个常用的版本号-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
             
<!--因为每个spring boot版本都有相对应的版本spring cloud版本,这个就是对spring cloud版本就行约束-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
             
<!--添加spring cloud的eureka依赖,因为上面已经约束过了所以这里不用在对eureka版本进行管理-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

</project>
4.创捷启动器
//spring boot启动项注解是1.SpringBootConfiguration2.EnableAutoConfiguration3.ComponentScan()
//这三个注解的组合注解就是去开自动自动配置相关文件,自动扫描
@SpringBootApplication

//通过一个marker bean来激活eureka的相关配置
//也可以说加上这个注解就表示这个项目是一个eureka注册中心了
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class);
    }
}

5.相关配置
# 本项目的端口号
server:
  port: 10086
  
# 服务名称
spring:
  application:
    name: eurekaServer

# 注册中心地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
  server:
  # 自动保护就是保护项目的在eureka中的存在,当心跳没有了我们就认定这个项目挂了。但是有可能是应为网络问题导致的心跳不能及时。
  # 所以就开启保护模式,但是在练习的时候也就在一台电脑上所以关闭
    enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
    eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

这样启动就已经完成eureka的搭建了。启动访问http://localhost:10086/就可以看见eureka中注册的项目。

项目提供者
1.在项目提供者添加相关依赖
<?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 https://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.0.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.yh</groupId>
    <artifactId>service-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <!-- SpringCloud的依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!-- Eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!-- 需要手动引入通用mapper的启动器,spring没有收录该依赖 -->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.配置文件
server:
  port: 8082
# 改成自己本机的相关配置
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql:///test?useSSL=false
    username: root
    password: root
  application:
    name: service-provider # 服务名称
# 实体类文件夹
mybatis:
  type-aliases-package: cn.cong.pojo
# 注册中心地址
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
    register-with-eureka: true
3.添加启动器
package cn.cong;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

/*
 * @Author: cong
 * @Date: 2022/8/15 16:16
 * @Desc:
 * */
@SpringBootApplication
//表示mapper的文件位置就不用每个都打上mapper注解了
@MapperScan("cn.cong.mapper")
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class);
    }
}
4.自己实现想实现的功能
项目调用者

和项目的提供者依赖一样

1.启动项

@SpringBootApplication
//服务的注册与发现
@EnableDiscoveryClient
public class ConsumerApplicaton {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplicaton.class);
    }
    //通过RestTemplate去调用远程的服务
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
2.配置文件
server:
  port: 80

spring:
  application:
    name: service-consumer

eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka
3.调用服务提供的功能
@RestController
@RequestMapping("/user")
public class UserController {
    //eureka特有的
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/queryUserById/{id}")
    public User selectUserbyId(@PathVariable("id") Integer id){
        //获取链接
    /*List<ServiceInstance> instances = discoveryClient.getInstances("service-provider");
        String uri = instances.stream().map(instance -> instance.getUri().toString() + "/user/queryUserById/"+id)
                .findFirst()
                .orElseThrow(() -> new RuntimeException("sadasdas"));
        System.out.println(uri);*/
        //通过service-provider也就是服务名拼接调用
         return restTemplate.getForObject("http://service-provider/user/queryUserById/" + id, User.class);
         // return restTemplate.getForObject("http://desktop-odko2nl:8082/user/queryUserById/41", User.class);
        // return restTemplate.getForObject(uri,User.class);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值