Spring Cloud Alibaba,Apache Dubbo 的基本应用
一、为什么要用dubbo
- 服务治理框架
- 服务的监控
- 服务的注册发现
- 服务的通信
- 服务的容错
- 服务的负载均衡
SpringCloud Alibaba :
- Dubbo
- seata
- rocketMQ
- Nacos
- Sentinel
二、Dubbo Spring Cloud的demo
2.1创建一个项目
- 创建一个spring-cloud-dubbo-example的maven工程
分别添加三个模块:
- spring-cloud-dubbo-sample-api
- spring-cloud-dubbo-sample-provider
- spring-cloud-dubbo-sample-consumer
其中后面两个模块都是spring boot的应用。
修改 spring-cloud-dubbo-sample-provider 这个模块中:
-
将dependencyManagement部分的依赖移动到parent pom.xml
-
修改spring-cloud-dubbo-sample-provider中的pom.xml,增加parent模块的依赖
com.gupaoedu.dubbo spring-cloud-dubbo-example 1.0-SNAPSHOT -
添加maven依赖
com.alibaba.cloud spring-cloud-starter-dubbo com.gupaoedu.dubbo 1.0-SNAPSHOT spring-cloud-dubbo-sample-api com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery
2.2定义服务接口
在spring-boot-dubbo-sample-api模块中,定义接口:
public interface IHelloService {
String sayHello();
}
2.3 实现服务
在spring-boot-dubbo-sample-provider中,实现IHelloService接口:
public class HelloServiceImpl implements IHelloService{
@Override
public String sayHello() {
return "Hello GuPao";
}
}
添加 @EnableDiscoveryClient 注解:
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudDubboSampleProviderApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleProviderApplication.class, args);
}
}
2.4配置dubbo服务发布
-
在服务实现类中添加 @Service 注解:
@Service
public class SayHelloServiceImpl implements ISayHelloService{@Override public String sayHello(String msg) { return "Hello, GuPaoEdu.cn"; }
}
注意:@Service注解是这个下面的:org.apache.dubbo.config.annotation.Service
-
配置dubbo提供方信息
#dubbo 服务扫描基础包路径
dubbo.scan.base-packages=com.gupaoedu.dubbo.springclouddubbosampleprovider
dubbo.protocol.id=dubboDubbo 服务暴露的协议配置,其中子属性 name 为协议名称,port 为协议端口( -1 表示自增端口,从 20880 开始)
dubbo.protocol.name=dubbo
#表示从20880自增
dubbo.protocol.port=-1
spring.cloud.nacos.discovery.server-addr=192.168.216.128:8848 -
dubbo.scan.base-packages : 指定 Dubbo 服务实现类的扫描基准包
-
dubbo.protocol : Dubbo 服务暴露的协议配置,其中子属性 name 为协议名称, port 为协议端口( -1 表示自增端口,从 20880 开始)
-
dubbo.registry : Dubbo 服务注册中心配置,其中子属性 address 的值 “springcloud://localhost”,说明挂载到 Spring Cloud 注册中心
-
spring.cloud.nacos.discovery : Nacos 服务发现与注册配置,其中子属性 server-addr指定 Nacos 服务器主机和端口
2.5 版本规范
项目的版本号格式为 x.x.x 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用 0,即版本号为 0.x.x 的格式。
由于 Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloudcommons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:
- 1.5.x 版本适用于 Spring Boot 1.5.x
- 2.0.x 版本适用于 Spring Boot 2.0.x
- 2.1.x 版本适用于 Spring Boot 2.1.x
- 2.2.x 版本适用于 Spring Boot 2.2.x
2.6构建服务消费者
2.6.1 添加jar包依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.gupaoedu.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>spring-cloud-dubbo-sample-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.6.2 添加配置文件
spring.application.name=spring-cloud-dubbo-sample-consumer
dubbo.application.name=spring-cloud-dubbo-sample-consumer
dubbo.cloud.subscribed-services=spring-cloud-dubbo-sample-provider
spring.cloud.nacos.discovery.server-addr=192.168.216.128:8848
除应用名称 spring.application.name 存在差异外, spring-cloud-dubbo-client-sample 新增了属性 dubbo.cloud.subscribed-services 的设置。并且该值为服务提供方应用 “springcloud-dubbo-sample-provider”。
它的主要作用是服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 “,” 分割。不推荐使用默认值为 “*”,它将订阅所有应用。
2.6.3编写测试代码
@RestController
@SpringBootApplication
public class SpringCloudDubboSampleConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudDubboSampleConsumerApplication.class, args);
}
@Reference
ISayHelloService sayHelloService;
@GetMapping("/say")
public String say(){
return sayHelloService.sayHello("Mic");
}
}
2.5.4 测试
三、Dubbo Spring Boot
3.1基于spring boot集成Dubbo方式
dubbo集成到spring boot中有一个好处,就是它可以继承spring boot本身的特性
- 自动装配(注解驱动、自动装配)
- production-ready(安全机制、健康检测、外部化配置)
3.2 创建项目结构
创建基础的项目结构:
spring-boot-dubbo-example [maven]
- spring-boot-dubbo-sample-api [maven]
- spring-boot-dubbo-sample-provider [spring boot]
- spring-boot-dubbo-sample-consumerp [spring-boot]
3.3 添加jar包依赖
从2.7开始,dubbo的版本和dubbo-spring-boot的版本是保持一致的,所以大家不用再去担心版本的问题。
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.2.1</version>
</dependency>
3.4 添加服务以及发布
@DubboService(registry = {"shanghai","hunan"},version = "2.0")
public class SayHelloServiceImpl2 implements ISayHelloService {
@Override
public String sayHello(String msg) {
return "[Version2.0]Hello,"+msg+" GuPaoEdu.cn";
}
}
registry = {“shanghai”,“hunan”},version = “2.0”
这一块是设置注册中心,可选参数
spring.application.name=spring-boot-dubbo-sample-provider
dubbo.registry.address=nacos://192.168.216.128:8848
dubbo.scan.basepackages=com.gupaoedu.springboot.dubbo.springbootdubbosampleprovider.service
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
3.5 客户端编写服务引用代码
3.5.1添加jar包依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.gupaoedu.com</groupId>
<version>1.0-SNAPSHOT</version>
<artifactId>spring-boot-dubbo-sample-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.2.1</version>
</dependency>
3.5.2 添加web测试类
@RestController
@SpringBootApplication
public class SpringBootDubboSampleConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDubboSampleConsumerApplication.class, args);
}
@DubboReference(registry = {"shanghai","hunan"},version = "2.0")
ISayHelloService sayHelloService;
@GetMapping("/say")
public String say(){
return sayHelloService.sayHello("Mic");
}
}
3.5.3 配置
dubbo.registry.address=nacos://192.168.216.128:8848
3.5.4 测试
相关文章
- 自定义spring boot的自动配置
- 解决IDEA使用Spring Initializr创建项目时,无法连接到https://start.spring.io的问题
- 【spring-kafka】属性concurrency的作用及如何配置(RoundRobinAssignor 、RangeAssignor)
- 《精通Spring MVC 4》——1.5 那就正式开始吧
- SpringMvc支持跨域访问,Spring跨域访问,SpringMvc @CrossOrigin 跨域
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
- 你需要具备这些条件才能更好的学习Spring Security 和Apache Shiro
- spring的context---ServletContext WebApplicationContext---Spring各种上下文的关系详解
- Spring Boot的TestRestTemplate使用
- apache jserv漏洞Apache漏洞
- spring框架漏洞整理(Spring Cloud Config路径穿越导致的信息泄露)
- 在原有的springMVC基础上集成spring security
- [转]Spring Boot——2分钟构建spring web mvc REST风格HelloWorld
- 走进Spring Boot的世界
- 【Spring-Security】详细使用用指南
- 【spring-bean】浅谈Spring的依赖注入(基础)
- 【spring mvc】Spring MVC 的参数解析器ArgumentResolver阐述
- 临远的spring security教程
- spring boot + vue + element-ui全栈开发入门——spring boot后端开发
- spring boot + vue + element-ui全栈开发入门——项目部署
- 玩转spring boot——负载均衡与session共享
- 玩转spring boot——结合阿里云持续交付
- 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享
- Spring揭秘笔记