1.认识微服务
我的理解:随着java互联网技术发展,单体架构满足不了企业需求,因此需要将项目拆分成各个子项目,各个子项目有自己的数据库,各司其职,实现各自的功能互不影响.
而微服务的实现需要各种技术配合
Dubbo,SpringCloud,SpringCloudAlibaba微服务框架对比
2.消费者与提供者
在项目中难免需要其他数据库的数据,这时就需要远程调用,需要被查询的一方暴露接口.即需要数据的一方为消费者,提供接口的一方为提供者.
1.在消费者启动类注入RsetTemplate
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
2.注入rsetTemplate对象,发请求得到数据,封装返回
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.发送请求
String url = "http://localhost:8081/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);
// 3.封装user
order.setUser(user);
// 4.返回
return order;
}
注意此时url是写死的,硬编码,这时需要eureka框架管理
3.Eureka框架
新建一个模块使用eureka注意JDK版本保持一致
1.引入依赖,eureka-server eureka是服务端
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2.配置yml
eureka自己也需要管理自己配置端口,名称,url
server:
port: 10086
spring:
application: # eureka服务名称
name: eureka-service
eureka:
client:
service-url: # eureka地址信息
defaultZone: http://localhost:10086/eureka
3.加@EnableEurekaServer注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
在order和user模块中:
1.配置依赖
<!--eureka-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.yml
spring:
application: # eureka服务名称
name: user-service
eureka:
client:
service-url: # eureka地址信息
defaultZone: http://localhost:10086/eureka
此时启动项目就能查看到信息了
启动不同模块实例(配置不同端口)
右键模块选择copy configuration 找到modify options 找到add VM options
-Dserver.port=8080 配置想要的端口
服务拉取
设置负载均衡策略(1是全局配置,2针对微服务配置)
/**
* 设置负载均衡策略(1.作用范围:全局 2.策略:随机)
* @return
*/
@Bean
public IRule randomRule(){
return new RandomRule();
}
4.nacos
安装之后bin目录里执行cmd命令
startup.cmd -m standalone
修改父工程依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
user和order项目加上nacos客户端依赖,注释掉之前的eureka配置
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
加上nacos端口配置
cloud:
nacos:
server-addr: localhost:8848