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

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

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

一、提供者与消费者

二、服务调用出现的问题

三、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注册中心》是由陶其原创撰写,首发于陶其的个人博客
转载声明:如需转载本文,请务必在转载处保留原文链接:https://www.tqazy.com/?p=1721,并明确注明文章来源。
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇