spring cloud alibaba学习(一)–Dubbo
Dubbo spring cloud 是基于 阿里开源的 dubbo 技术栈,按照spring cloud 规范实现的一套微服务治理技术框架,和 spring cloud (基于 netfix 开源的一些技术栈)类似
功能 | spring cloud | spring cloud alibaba |
---|---|---|
分布式配置(Distributed configuration) | Git、Zookeeper、Consul、JDBC | Spring Cloud 分布式配置 + Dubbo 配置中心 |
服务注册与发现(Service registration and discovery) | Eureka、Zookeeper、Consul | Spring Cloud 原生注册中心 + Dubbo 原生注册中心(Nocas,zookeeper…) |
负载均衡(Load balancing) | Ribbon(随机、轮询等算法) | Dubbo 内建实现(随机、轮询等算法 + 权重等特性) |
服务熔断(Circuit Breakers) | Spring Cloud Hystrix | Spring Cloud Hystrix + Alibaba Sentinel 等 |
服务调用(Service-to-service calls) | Open Feign、RestTemplate | Spring Cloud 服务调用 + Dubbo @Reference |
链路跟踪(Tracing) | Spring Cloud Sleuth + Zipkin | Zipkin、opentracing 等 |
dubbo 初探
为什么要用dubbo
- 服务治理框架
- 服务的监控
- 服务的注册发现
- 服务的通信
- 服务的容错
- 服务的负载均衡
本章节先来简单学习下dubbo的使用,
https://dubbo.apache.org/ 参考官网
服务提供者
-
引入dubbo pom依赖
<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.8</version> </dependency>
-
application.xml 配置暴露服务
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo-server" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="N/A" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明需要暴露的服务接口 --> <dubbo:service interface="com.lujia.lesson.dubbo.ILoginService" ref="loginService" /> <!-- 和本地bean一样实现服务 --> <bean id="loginService" class="com.lujia.lesson.dubbo.LoginServiceImpl" /> </beans>
-
启动
public class App { public static void main( String[] args ) { Main.main(args); } }
服务消费者
-
application.xml配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="dubbo-client" /> <!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="N/A" /> <!-- 生成远程服务代理,可以和本地bean一样使用demoService --> <dubbo:reference id="loginService" interface="com.lujia.lesson.dubbo.ILoginService" url="dubbo://192.168.56.1:20880/com.lujia.lesson.dubbo.ILoginService" /> </beans>
-
启动
public class App { public static void main( String[] args ) { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("classpath:/META-INF/spring/application.xml"); ILoginService loginService=(ILoginService)applicationContext.getBean("loginService"); System.out.println( loginService.login("admin","123456") ); } } //控制台打印 : success
以上是一个简单的dubbo服务Rpc调用的列子,其中并未使用注册中心,手动配置服务地址的方式,如果暴露很多个服务的情况下,这样配置非常麻烦,所以有了注册中心,所有服务的地址都从注册中心拉取
加入注册中心
-
这里使用zookeeper,下载一个zookeeper 的docker images 运行
docker pull zookeeper docker run -e "ZOO_INIT_LIMIT=10" -p2181:2181 --name some-zookeeper --restart always -d zookeeper
-
修改 注册中心地址
<dubbo:registry address="zookeeper://172.16.1.212:2181" timeout="10000"/>
使用nacos 注册中心
-
下载nacos docker images
docker pull nacos/nacos-server git clone --depth 1 https://github.com/nacos-group/nacos-docker.git cd nacos-docker // 用mysql 版本的启动 docker-compose -f example/standalone-mysql-5.7.yaml up
-
访问 8848 端口即可
-
添加pom依赖
<!-- Keep latest Nacos client version --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.2.1</version> </dependency>
-
修改配置中心地址
<!-- 使用multicast广播注册中心暴露服务地址 --> <dubbo:registry address="nacos://172.16.1.212:8848" timeout="10000"/>
spring boot 整合dubbo
服务提供者
-
配置文件
spring.application.name=dubbo-spring-boot-provider dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.registry.address=nacos://172.16.1.212:8848
-
pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.8</version> </dependency> <!-- Dubbo Registry Nacos --> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.2.1</version> </dependency>
-
serivce 使用
@DubboService
注解标记即可@DubboService public class LoginServiceImpl implements ILoginService { @Override public String login(String userName, String password) { return "success"; } }
服务消费者
-
配置文件
server.port=8080 spring.application.name=dubbo-spring-boot-consumer dubbo.registry.address=nacos://172.16.1.212:8848
-
pom 依赖 同上
-
使用
@DubboReference
注解即可@DubboReference() private ILoginService loginService;
demo 代码地址 : https://github.com/Rfruelu/dubbo-spring-cloud-demo.git