时间:2021-05-20
概述:
节点角色说明
节点 角色说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行的容器
调用关系说明
项目构建
开发环境主要涉及以下方面:
具体代码可以查看 github 的 dubbo 模块: https://github.com/UniqueDong/springboot-study
Dubbo API
定义服务接口,打成 jar 包让消费者依赖,服务者实现接口。该工程只有接口定义以及 model 对象。@Data 属于lombok 开源库提供的特性,方便开发。
model 对象定义:
@Datapublic class User implements Serializable { private Long id; private String username;}provider 接口定义:
public interface UserProvider { List<User> listUser();}Provider 服务提供者
pom依赖:
引入spring-boot-starter,dubbo-api 接口就是我们上面提到的 接口定义 jar ,dubbo-spring-boot-starter ,dubbo-dependencies-zookeeper。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <artifactId>spring-boot-starter-logging</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>zero.springboot.study</groupId> <artifactId>dubbo-api</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <!--dubbo start--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.1</version> </dependency> <!-- Zookeeper dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.1</version> <type>pom</type> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <!--dubbo end--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.57</version> </dependency> </dependencies>配置文件 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 List<User> listUser() { User user = new User(); user.setId(1L); user.setUsername("青龙"); return Lists.newArrayList(user); }}Consumer
Pom 定义:
我们要依赖 spring-boot-starter-web 提供http rest接口给前端调用。同时内部通过 Dubbo 实现 RPC调用服务提供者。
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>zero.springboot.study</groupId> <artifactId>dubbo-api</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> <!--dubbo start--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.1</version> </dependency> <!-- Zookeeper dependencies --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>2.7.1</version> <type>pom</type> <exclusions> <exclusion> <artifactId>log4j</artifactId> <groupId>log4j</groupId> </exclusion> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions> </dependency> <!--dubbo end--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>yaml 定义:
server: # web 日更年期端口 port: 9005spring: 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;@Servicepublic class UserService { @Reference private UserProvider userProvider; public List<User> listUser() { return userProvider.listUser(); }}我们通过一个RESTfull接口,提供给前端调用。
@RestController@RequestMapping("/users")public class UserController { @Autowired private UserService userService; @GetMapping public Object listUser() { List<User> list = userService.listUser(); return list; }}总结
各种具体协议、注册中心、多注册中心、超时等配置可以查看官方文档 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
基于redis的spring-boot分布式锁组件,使得项目拥有分布式锁能力变得异常简单,开箱即用。此组件同样适用于springmvc项目。本次更新内容:支持锁
前言在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件:spring-cloud-config,它支持配置服务
开始接触分布式概念,学习之前要准备搭建Dubbo和Zookeeper环境的简单搭建。Window下安装Zookeeper和Dubbo-admin1、Apache
首先我们看看为什么添加Watch。ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调
大家可以自行百度下阿里分布式事务,在这里我就不啰嗦了。下面是阿里分布式事务开源框架的一些资料,本文是springboot+dubbo+fescar的集成。快速开