可以看这个哥们的笔记,比我记的好得多
微服务技术栈 - 乐心湖's Blog | 技术小白的技术博客
消息队列解决里面服务集群之间的异步通信。
系统监控链路追踪,实时监控每个结点的运行状态(负载,内存),能快速定位到哪个方法。
Jenkins,对微服务项目的编译,然后通过docker打包。K8s和Rancher实现部署。
不同的业务写在不同的机器上,但它们之间的相互调用也是问题。
两个sql文件导入不同数据库。因为现在还没有部署。
我们目前时这样
我们需要做到这样
这个方法对外暴露了一个接口,只要我们在浏览器输入对应的地址一定可以得到信息。
但我们如何在java代码中,发起http请求? 看下一小节如何解决。
在service这里可以获得,数据库返回的user的id值。
这个方法发请求,如果不指明User.class,会把数据装成json。这里指明了,就会反序列化成User对象。
然后把它设置到order里。
角色是相对而言的。一个服务既可以是提供者,也可以是消费者。
用Eureka,来选择。服务提供者的地址信息。
eureka帮助我们记信息,找他要就行,记着每一个微服务的信息。
拿到信息,用负载均衡的方式挑一个。
Eureka将自己也注册了,因为以后可能会有多个Eureka。
启动类。
测试地址,可以localhost访问。
需要更改service方法里请求的路径,改成服务名,才能访问集群。
看到注册中心目前只有一个实例。 我们需要去注册。
步骤1:在需要注册进eureka得微服务得yml文件里加上。
步骤2:加上自己微服务得名称
这个是一个微服务,再开一个,用不同得端口。
复制粘贴,导致eureka配置没顶格。误认为是别的配置里加eureka。
得NM严格对应,服了。
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: a839846976
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
template加注解, 表明这个请求要被ribbon处理。
拦截的动作是它做的
我们点进这个接口看方法。它会拦截客户端发起的HTTP请求。
我们在这个方法上打断点。然后刷新页面重新获得数据。
里面先获得 主机名和服务的名称。然后去找eureka拉去service。
把服务名称交给loadBanlance,loadBanlance是RibbonLoadBalancerClient对象。
我们点进loadBanlance的excute方法。发现它根据servceId,也就是serviceName,从eureka里拉取服务列表。
我们看getServer方法干什么的。发现实现负载均衡的策略是通过一个 Irule类。
从这个图看,默认的ZoneAvoidanceRule ,可能有轮换的性质。
常用的规则类。
如何调整rule的类型?
方法一的作用是全局的,会影响到其他微服务的选择策略。
方法二:order-service,发送请求调用user-service的数据,所以在yml里定义选择userservice的策略。
加载一次之后,以后不用加载,服务列表会有缓存。
还有配置对哪个client做饥饿加载。
解压红线。
配置文件里有端口8848。如果我们端口有用8848的,可以修改。
bin下面的启动文件,双击可以启动。
cmd里启动 -m指定模式,这里我们先用单机模式 standalone。
在bin目录下执行命令。
访问consloe地址。
登录的默认账号和密码都是nacos。
安装指南里有依赖。复制粘贴。
客户端的两个依赖注释掉。
然后修改这俩服务的yml文件。
nacos的配置属于Spring的配置。
地域划分的集群。
service里改访问集群的路径。
这里当时没有上注解,所以一直没办法有负载均衡操作。
3.user-service的权重。
微服务技术栈 - 乐心湖's Blog | 技术小白的技术博客