您现在的位置是:首页 >技术交流 >Eureka网站首页技术交流

Eureka

海宽宽 2024-06-29 12:01:02
简介Eureka

前置

把一个完整项目拆成多个微服务项目,不同微服务之间独立开发,部署

  • 登录验证服务:用于处理用户注册、登录、密码重置等,反正就是一切与账户相关的内容,包括用户信息获取等。
  • 图书管理服务:用于进行图书添加、删除、更新等操作,图书管理相关的服务,包括图书的存储等和信息获取。
  • 图书借阅服务:交互性比较强的服务,需要和登陆验证服务和图书管理服务进行交互。

springboot项目结构图

[外链图片转存中…(img-BeBI7jTt-1685195320263)]

springcloud项目结构图

实体类实现在不同项目中公用,放在mycommons项目中,在其他项目导入mycommons依赖来使用它

<dependency>
    <groupId>com.example</groupId>
    <artifactId>mycommons</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

Eureka

[译:找到了] 一个集中管理微服务的平台, 自动注册并发现微服务

创建myeureka 项目

父项目添加依赖

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

myeureka项目添加依赖

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

myeureka主类

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

myeureka yml

server:
  port: 8888
eureka:
    # 开启之前需要修改一下客户端设置(虽然是服务端
  client:
      # 由于我们是作为服务端角色,所以不需要获取服务端,改为false,默认为true
        fetch-registry: false
        # 暂时不需要将自己也注册到Eureka
    register-with-eureka: false
    # 将eureka服务端指向自己
    service-url:
      defaultZone: http://localhost:8888/eureka

把其他项目注册到 eureka

其他项目导入依赖

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

各自修改yml

spring:
  application:
    name: xxxservice # 项目名
eureka:
  client:
      # 跟上面一样,需要指向Eureka服务端地址,这样才能进行注册
    service-url:
      defaultZone: http://localhost:8888/eureka

+++

借阅项目的controller借阅功能需要显示借阅人和借阅书籍, 对其他微服务实现远程调用

没有eureka时需要打上网址, 高度耦合

User user = template.getForObject("http://localhost:8082/user/"+uid, User.class);

现在只要打上项目名即可

@Service
public class BorrowServiceImpl implements BorrowService {

    @Resource
    BorrowMapper mapper;

    @Resource
    RestTemplate template;

    @Override
    public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
        List<Borrow> borrow = mapper.getBorrowsByUid(uid);

        //这里不用再写IP,直接写服务名称userservice
        User user = template.getForObject("http://userservice/user/"+uid, User.class);
        //这里不用再写IP,直接写服务名称bookservice
        List<Book> bookList = borrow
                .stream()
                .map(b -> template.getForObject("http://bookservice/book/"+b.getBid(), Book.class))
                .collect(Collectors.toList());
        return new UserBorrowDetail(user, bookList);
    }
}

配置类导入一下bean

@Configuration
public class BeanConfig {
    @Bean
    @LoadBalanced
    RestTemplate template(){
        return new RestTemplate();
    }
}

负载均衡

同一个服务器实际上是可以注册很多个的,但是它们的端口不同

[外链图片转存中…(img-zBnNx08j-1685195320267)]

Eureka中,同一个服务出现了两个实例

这两个用户服务任何一个假如挂了,另一个依然可以使用

高可用

创建eureka集群, eureka服务器挂了一个, 另外的依然可以使用

eureka 创建两个yml配置

server:
  port: 8801
spring:
  application:
    name: eurekaserver
eureka:
  instance:
      # 由于不支持多个localhost的Eureka服务器,但是又只有本地测试环境,所以就只能自定义主机名称了
      # 主机名称改为eureka01
    hostname: eureka01
  client:
    fetch-registry: false
    # 去掉register-with-eureka选项,让Eureka服务器自己注册到其他Eureka服务器,这样才能相互启用
    service-url:
        # 注意这里填写其他Eureka服务器的地址,不用写自己的
      defaultZone: http://eureka01:8801/eureka
server:
  port: 8802
spring:
  application:
    name: eurekaserver
eureka:
  instance:
    hostname: eureka02
  client:
    fetch-registry: false
    service-url:
      defaultZone: http://eureka01:8801/eureka

使用 switchhosts 创建 hosts

127.0.0.1	eureka01
127.0.0.1	eureka02

每个微服务项目yml修改一遍

eureka:
  client:
    service-url:
        # 将两个Eureka的地址都加入,这样就算有一个Eureka挂掉,也能完成注册
      defaultZone: http://localhost:8801/eureka, http://localhost:8802/eureka

两个yml添加启动配置

注册两个eureka服务器

这两个eureka服务器关闭一个, 依然可以运行

ltZone: http://localhost:8801/eureka, http://localhost:8802/eureka






两个yml添加启动配置

[外链图片转存中...(img-551E4Zzl-1685195320270)]



注册两个eureka服务器

[外链图片转存中...(img-wDXiTa70-1685195320271)]

这两个eureka服务器关闭一个,  依然可以运行































风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。