SpringBootDubbo构建分布式服务的方法
概述:
创新互联公司专注于乌海海南企业网站建设,响应式网站,商城建设。乌海海南网站建设公司,为乌海海南等地区提供建站服务。全流程按需求定制设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
节点角色说明
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方 |
Consumer | 调用远程服务的服务消费方 |
Registry | 服务注册与发现的注册中心 |
Monitor | 统计服务的调用次数和调用时间的监控中心 |
Container | 服务运行的容器 |
调用关系说明
- 服务容器 Container 负责启动,加载,运行服务提供者。
- 服务提供者 Provider 启动的时候,向注册中心 Registry 注册自己提供的服务。
- 服务消费者 Consumer 在启动的时候,向注册中心 Registry 订阅自己所需要的服务。注册中心 Registry 返回服务提供者的地址列表给消费者,如果有变更注册中心将基于长连接推送变更数据给消费者。
- 服务消费者从提供者地址列表中,基于软负载均衡算法,选择一台提供者进行进行调用,如果调用失败再选择另外一台。
- 服务消费者与提供者在内存中统计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心 Monitor 。
项目构建
开发环境主要涉及以下方面:
- Spring Boot
- JDK 8
- Dubbo 2.7.1
- Zookeeper
具体代码可以查看 github 的 dubbo 模块: https://github.com/UniqueDong/springboot-study
Dubbo API
定义服务接口,打成 jar 包让消费者依赖,服务者实现接口。该工程只有接口定义以及 model 对象。@Data 属于lombok 开源库提供的特性,方便开发。
model 对象定义:
@Data public class User implements Serializable { private Long id; private String username; }
provider 接口定义:
public interface UserProvider { ListlistUser(); }
Provider 服务提供者
pom依赖:
引入spring-boot-starter,dubbo-api 接口就是我们上面提到的 接口定义 jar ,dubbo-spring-boot-starter ,dubbo-dependencies-zookeeper。
org.springframework.boot spring-boot-starter spring-boot-starter-logging org.springframework.boot zero.springboot.study dubbo-api 1.0.0-SNAPSHOT org.apache.dubbo dubbo-spring-boot-starter 2.7.1 org.apache.dubbo dubbo 2.7.1 org.apache.dubbo dubbo-dependencies-zookeeper 2.7.1 pom log4j log4j slf4j-log4j12 org.slf4j com.alibaba fastjson 1.2.57
配置文件 yaml 定义:
spring: application: name: dubbo-provider #自定义配置 embedded: zookeeper: # zookeeper 服务连接端口 port: 2181 # dubbo 配置 dubbo: # 注册中心配置 registry: id: dubbo-provider address: zookeeper://127.0.0.1:${embedded.zookeeper.port} group: local application: name: dubbo-provider id: dubbo-provider logger: slf4j qosEnable: true qosPort: 22224 qosAcceptForeignIp: false # dubbo 协议配置 protocol: # -1 表示使用随机未被占用的端口 port: -1 name: dubbo scan: # dubbo 服务提供者实现类所在包 base-packages: com.zero.provider.impl
实现 api 定义的接口
注意 @Service 是 Dubbo 的,不要导入了 Spring 的。
import com.google.common.collect.Lists; import com.zero.api.model.User; import com.zero.api.provider.UserProvider; import org.apache.dubbo.config.annotation.Service; import java.util.List; @Service(interfaceClass = UserProvider.class) public class UserProviderImpl implements UserProvider { @Override public ListlistUser() { User user = new User(); user.setId(1L); user.setUsername("青龙"); return Lists.newArrayList(user); } }
Consumer
Pom 定义:
我们要依赖 spring-boot-starter-web 提供http rest接口给前端调用。同时内部通过 Dubbo 实现 RPC调用服务提供者。
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging zero.springboot.study dubbo-api 1.0.0-SNAPSHOT org.apache.dubbo dubbo-spring-boot-starter 2.7.1 org.apache.dubbo dubbo 2.7.1 org.apache.dubbo dubbo-dependencies-zookeeper 2.7.1 pom log4j log4j slf4j-log4j12 org.slf4j org.projectlombok lombok true
yaml 定义:
server: # web 日更年期端口 port: 9005 spring: application: name: dubbo-comsumer #自定义配置 embedded: zookeeper: port: 2181 # dubbo 配置 dubbo: registry: id: dubbo-comsumer address: zookeeper://127.0.0.1:${embedded.zookeeper.port} group: local application: name: dubbo-comsumer id: dubbo-comsumer logger: slf4j qosEnable: false qosPort: 22223 qosAcceptForeignIp: false protocol: port: -1 name: dubbo # 是否检查服务提供者有效 consumer: check: false
服务消费者调用服务生产者
import com.zero.api.model.User; import com.zero.api.provider.UserProvider; import org.apache.dubbo.config.annotation.Reference; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Reference private UserProvider userProvider; public ListlistUser() { return userProvider.listUser(); } }
我们通过一个RESTfull接口,提供给前端调用。
@RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public Object listUser() { Listlist = userService.listUser(); return list; } }
总结
各种具体协议、注册中心、多注册中心、超时等配置可以查看官方文档 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。
分享标题:SpringBootDubbo构建分布式服务的方法
文章源于:http://myzitong.com/article/psjjeo.html