视频课程地址:黑马程序员_微服务技术栈
一、提供者与消费者
二、服务调用出现的问题
三、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
已实现负载均衡访问