springcloud(一)-Eureka&Ribbon
2020-12-17 22:35
标签:接口 指定 run ota client wired sel new 根据 架构演变 特点:所有功能代码都在一个项目中 特点:根据功能把项目拆分成一个个单独的系统,系统之间不进行数据交互 特点:根据功能把项目拆分成一个个单独的系统,系统之间进行数据交互 特点:根据功能把项目拆分成一个个单独的系统,系统之间进行数据交互 特点:根据功能把项目拆分成一个个单独的系统,每个系统提供单一服务,系统之间进行数据交互 cxf、axis:基于soap hessian:基于hessian协议 dubbo(dubbox) Fegin:dubbo RPC协议,Feign http协议 概念:基于springBoot的,微服务框架集大成者 所有springCloud工程(直接、间接)都要导入如下坐标: 概念:SpringCloud核心组件,默认的注册中心(Consul、Nacos) 作用:注册中心,服务注册、发现(注意:既不提供服也不消费服务) 角色:Eureka服务端(注册中心)、Eureka客户端(服务提供者、服务消费者) 搭建步骤: 1)导入起步依赖 2)配置(配置文件、配置类) 3)代码 注意:如果依照上述操作出现Eureka-Server启动后自动停止,导入如下依赖即可: 1)导入起步依赖 2)配置 3)代码 概念:基于Go语言,多数据中心、高可用、分布式注册中心 作用:服务注册、服务发现 1)导入起步依赖 2)配置 3)代码 概念:阿里开源的高可用、高性能注册中心和配置中心; ? Nacos = Spring Cloud注册中心 + Spring Cloud配置中心 作用:服务注册、发现;集中管理配置。 1)导入起步依赖 2)配置 3)代码 概念:SpringCloud组件,负载均衡器 作用:负载均衡 负载均衡算法:轮询(默认)、随机、加权、hash 策略(底层在IRule接口中找实现类) 使用步骤: 1)导包 2)配置 3)代码 源码跟踪(能断点查看即可) 概念:mybatis一个插件,对单表SQL进行了封装 作用:提供了对单表的CRUD操作 使用步骤: 1)导入起步依赖 2)配置 3)代码 实体类 接口 引导类 概念 核心 优点 使用步骤 1)导包 2)配置 3)代码 springcloud(一)-Eureka&Ribbon 标签:接口 指定 run ota client wired sel new 根据 原文地址:https://www.cnblogs.com/zhang-blog/p/14100577.html
远程服务调用方式
Eureka
Ribbon
## 架构演变(了解)
集中式
应用场景:访问量不太大的小项目
优点:开发、部署比较简单方便
缺点:修改代码,需要对整个项目进行打包部署,相对比较麻烦
垂直拆分
应用场景:访问量稍微有点大,一个项目单独承载不了(中型项目)
优点:相对于集中来说,承载的访问量跟多;系统间相互独立可以采用不同的开发语言。
缺点:代码冗余、代码复用性比较低
分布式
应用场景:访问量稍微有点大,一个项目单独承载不了(大中型项目)
优点:相对于集中来说,承载的访问量跟多;系统间相互独立可以采用不同的开发语言;代码冗余度降低;
缺点:服务间调用关系比较杂乱
SOA
应用场景:访问量稍微有点大,一个项目单独承载不了(大型项目)
优点:相对于集中来说,承载的访问量跟多;系统间相互独立可以采用不同的开发语言;代码冗余度降低;有服务治理工 具,服务间调用关系比较清晰
缺点:一个系统对外提供多种服务,调用不清晰
微服务
应用场景:访问量稍微有点大,一个项目单独承载不了(特大项目)
优点:相对于集中来说,承载的访问量更多;系统间相互独立可以采用不同的开发语言;代码冗余度降低;有服务治理工 具,服务间调用关系比较清晰;一个系统对外提供一种服务;耦合度低。
缺点:系统太多,占用服务器比较多,调用关系比较复杂,部署比较麻烦
总结:分布式、SOA、微服务都是“分布式架构”。
## 服务远程调用方式
webservice远程服务调用(了解)
RestTemplate
```tex
spring内置Http请求对象,可以在项目中直接使用@Autowired注入使用,也可以切换底层实现:
HttpClient
OkHttp
JDK原生的URLConnection(默认的)
SpringCloud
Eureka
Eureka服务端
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
service-url:
# eureka 服务地址:
#单机版:指定自己地址接口
#集群版:需要指定其它集群eureka地址,有几个写几个,以逗号分隔即可
defaultZone: http://127.0.0.1:10086/eureka
# 默认true:单机版,不注册自己false;集群版,注册自己,使用默认值true即可
register-with-eureka: false
# 默认true:单机版,不拉取服务false;集群版,拉取服务,使用默认值true即可
fetch-registry: false
server:
# 服务失效剔除时间间隔,默认60秒
eviction-interval-timer-in-ms: 60000
# 关闭自我保护模式(默认是打开的)
enable-self-preservation: false
package com.itheima;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer//声明当前应用为Eureka服务端(注册中心)
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
Eureka客户端
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka #注册中心地址,如果集群,有几个写几个,逗号分隔
instance:
# 更倾向使用ip地址,而不是host名
prefer-ip-address: true
# ip地址
ip-address: 127.0.0.1 #默认0.0.0.0.0.0.1
# 续约间隔,默认30秒
lease-renewal-interval-in-seconds: 5
# 服务失效时间,默认90秒
lease-expiration-duration-in-seconds: 5
package com.itheima.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.itheima.user.mapper")
//@EnableDiscoveryClient //开启Eureka、zookeeper、consul客户端发现功能
@EnableEurekaClient //声明当前工程为Eureka Client,开启Eureka客户端发现功能
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
Consul
使用步骤
准备工作:搭建consul注册中心
#配置consul注册中心地址
server:
port: 8000
spring:
cloud:
consul:
host: localhost # consul 服务端的 ip
port: 8500 # consul 服务端的端口 默认8500
discovery:
service-name: ${spring.application.name} # 当前应用注册到consul的名称
prefer-ip-address: true # 注册ip
application:
name: consul-provider # 应用名称
//在引导类添consul服务注册发现注解@EnableDiscoveryClient
@EnableDiscoveryClient(老师给的代码没加此注解,可以不加,都建议加上)
@SpringBootApplication
public class ConsulApplicatioin{
public static void main(String[] args) {
SpringApplication.run(ConsulApplicatioin.class, args);
}
}
Nacos
使用步骤
准备工作:搭建nacos注册中心
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # 配置nacos 服务端地址
application:
name: nacos-provider # 服务名称
//在引导类添Nacos服务注册发现注解@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class NacosApplicatioin{
public static void main(String[] args) {
SpringApplication.run(NacosApplicatioin.class, args);
}
}
Ribbon
负载均衡分类:服务端、客户端负载均衡。区分依据,服务地址列表在服务端还是在客户端
举例:服务端负载均衡nginx;客户端负载均衡ribbon。
负载均衡:在集群中,根据服务器性能不同,分配对应的负载(请求数)
例:
User-Service 1000请求
A 8G User-Service 250 1
B 8G User-Service 250 1
C 16G User-Service 500 2
#ribbon相关配置,没有特殊要求可以省略,使用默认值即可
@LoadBalanced //添加到执行远程调用的Http客户上
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
1)LoadBalancerInterceptor拦截请求,根据请求URI获取serviceID(源码大概:第31行)
2)RibbonLoadBalancerClient执行请求时,根据serviceID从Eureka注册中心获取服务列表,使用负载均衡算法从服务列表中,获取一个服务地址,发送请求(源码大概:第64行)
通用Mapper使用
#使用默认配置即可,可以省略
package com.itheima.user.pojo;
import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Table(name = "tb_user")
public class User{
// id
@Id
//开启主键自动回填
@KeySql(useGeneratedKeys = true)
private Long id;
// 用户名
private String userName;
// 密码
private String password;
// 姓名
private String name;
// 年龄
private Integer age;
// 性别,1男性,2女性
private Integer sex;
// 出生日期
private Date birthday;
// 创建时间
private Date created;
// 更新时间
private Date updated;
// 备注
private String note;
}
public interface UserMapper extends Mapper
package com.itheima.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.itheima.user.mapper") //该注解来自tkMapper,导包时要注意
@EnableDiscoveryClient //开启Eureka客户端发现功能
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
springBoot回顾
是一种快速使用spring的方式
自动装配:约定大于配置,有默认配置。简化配置文件书写
起步依赖:基于maven依赖传递实现。简化依赖包管理
1)自动装配,简化配置文件书写
2)起步依赖,简化依赖包管理
3)非功能性增强:监控、日志...
4)嵌入式服务器,项目启动更加方便
#springboot配置:配置文件(.properties、yml)、配置类(@Configuration)
#application.yml
spring:
application:
name: springboot-project
server:
port: 8080
//引导类
@SpringbootApplication
public class XxxxApplication{
public static void main(String[] args){
SpringApplication.run(XxxxApplication.class,args);
}
}
扩展内容
1)所有远程交互所使用的的pojo都要实现序列化接口(Serializable)
2)实体类书写规范
1.如果有有有参构造,一定要声明无参构造(反射要用无参构造)
2.见名知意(包名、类名、属性名、方法名)
文章标题:springcloud(一)-Eureka&Ribbon
文章链接:http://soscw.com/essay/36950.html