普通视图

Received before yesterday

微服务技术栈03 – eureka注册中心

作者陶其
2025年3月25日 17:16

感谢订阅陶其的个人博客!

视频课程地址:黑马程序员_微服务技术栈

微服务技术栈系列(目录):点击跳转
上一节:服务拆分及远程调用

一、提供者与消费者

二、服务调用出现的问题

三、eureka原理分析

四、搭建eureka服务

4.1 步骤

pom.xml

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

application.yml

spring:
  application:
    name: eurekaserver   # 微服务名称

eureka:
  client:
    serviceUrl:  # eureka地址信息
      defaultZone: http://localhost:${server.port}/eureka

4.2 实践

4.2.1 项目结构

4.2.2 父pom

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-cloud.version>2021.0.8</spring-cloud.version>
    <mysql.version>5.1.47</mysql.version>
    <mybatis.version>2.1.1</mybatis.version>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.18</version>
</parent>

<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>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

4.2.3 本项目pom

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<parent>
    <groupId>com.tqazy</groupId>
    <artifactId>study_spring_cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>

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

4.2.4 主程序文件(EurekaApplication.java)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {

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

4.2.5 application.yml

server:
  port: 7070  # 服务端口

spring:
  application:
    name: eurekaserver   # 微服务名称

eureka:
  client:
    serviceUrl:  # eureka地址信息
      defaultZone: http://localhost:${server.port}/eureka

4.2.6 运行访问

五、服务注册

5.1 步骤

pom.xml

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

application.yml

spring:
  application:
    name: userserver   # 微服务名称

eureka:
  client:
    serviceUrl:  # eureka地址信息
      defaultZone: http://localhost:${eureka-server.port}/eureka

5.2 实践

5.2.1 pom文件

在pom文件添加eureka客户端的依赖

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!-- spring-boot-starter-web Spring Boot starter 上的 <dependency>。
     它们告诉 Spring Boot,该应用程序是Web应用程序。
     Spring Boot 会相应地形成自己的观点。-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

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

5.2.2 在application.yml添加配置

server:
  port: 8081
spring:
  application:
    name: user-server   # 微服务名称
  datasource:
    url: jdbc:mysql://192.168.100.241:3306/cloud-user?useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  type-aliases-package: com.tqazy.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    com.tqazy: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

eureka:
  client:
    serviceUrl:  # eureka地址信息
      defaultZone: http://localhost:7070/eureka

5.2.3 运行

重启程序,查看eureka

5.3 一个服务启动多个实例

-Dserver.port=8083

结果:

六、服务发现

6.1 步骤

@LoadBalanced注解负责负载均衡

负载均衡原理和策略下一章详细讲解

6.2 实践

6.2.1 原代码

原本order-service访问user-service代码

OrderApplication.java

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@MapperScan("com.tqazy.order.mapper")
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

OrderService.java

public Order queryOrderById(Long orderId) {
    // 1.查询订单
    Order order = orderMapper.findById(orderId);

    String url = "http://127.0.0.1:8081/user/" + order.getUserId();
    User user = restTemplate.getForObject(url, User.class);

    order.setUser(user);

    // 4.返回
    return order;
}

6.2.2 新代码

OrderApplication.java

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

OrderService.java

public Order queryOrderById(Long orderId) {
    // 1.查询订单
    Order order = orderMapper.findById(orderId);

    String url = "http://userservice/user/" + order.getUserId();
    User user = restTemplate.getForObject(url, User.class);

    order.setUser(user);

    // 4.返回
    return order;
}

6.2.3 重新运行order-service

已实现负载均衡访问

七、总结

喜欢微服务技术栈03 – eureka注册中心这篇文章吗?您可以点击浏览我的博客主页 发现更多技术分享与生活趣事。

微服务技术栈02 – 服务拆分及远程调用

作者陶其
2025年3月4日 18:55

感谢订阅陶其的个人博客!

视频课程地址:黑马程序员_微服务技术栈

微服务技术栈系列(目录):点击跳转
上一节:初识微服务
下一节:eureka注册中心

一、服务拆分

二、服务间调用

三、简单实现服务间调用

创建两个SpringBoot项目:

  • user-service
  • order-service

3.1 项目架构

项目代码下载地址:顶部导航栏 => 资源 => 资源下载 => 笔记中的项目 => 1

3.2 运行

将这两个项目运行起来,然后调用order-service的接口。

  • user-service:http://localhost:8080/user/queryUserById?id=1
  • order-service:http://localhost:8081/order/queryOrderById?id=1

运行结果:

喜欢微服务技术栈02 – 服务拆分及远程调用这篇文章吗?您可以点击浏览我的博客主页 发现更多技术分享与生活趣事。

微服务技术栈

作者陶其
2025年3月4日 18:26

感谢订阅陶其的个人博客!

微服务技术栈(目录)

一、初识微服务

二、服务拆分及远程调用

三、eureka注册中心

喜欢微服务技术栈这篇文章吗?您可以点击浏览我的博客主页 发现更多技术分享与生活趣事。

微服务技术栈01 – 初识微服务

作者陶其
2025年3月4日 17:41

感谢订阅陶其的个人博客!

视频课程地址:黑马程序员_微服务技术栈

微服务技术栈系列(目录):点击跳转
下一节:服务拆分及远程调用

一、微服务技术栈简介

二、认识微服务

2.1 服务架构演变

2.1.1 单体架构

2.1.2 分布式架构

2.1.3 微服务

2.1.4 总结

2.2 微服务技术对比

2.2.1 微服务结构

2.2.2 微服务技术对比

2.2.3 企业需求

推荐优先级:SpringCloudAlibaba > SpringCloud > Dubbo

2.3 Spring Cloud

2.3.1 Spring Cloud简介

官网地址:点击跳转

2.3.2 Spring Cloud与Spring Boot的版本兼容关系

本课程学习使用的版本是Hoxton.SR10,因此对应的Spring Boot版本是2.3.x版本。

喜欢微服务技术栈01 – 初识微服务这篇文章吗?您可以点击浏览我的博客主页 发现更多技术分享与生活趣事。

❌