節點角色說明html
節點 | 角色說明 |
---|---|
Provider | 暴露服務的服務提供方 |
Consumer | 調用遠程服務的服務消費方 |
Registry | 服務註冊與發現的註冊中心 |
Monitor | 統計服務的調用次數和調用時間的監控中心 |
Container | 服務運行的容器 |
調用關係說明前端
開發環境主要涉及如下方面:java
具體代碼能夠查看 github 的 dubbo 模塊:https://github.com/UniqueDong/springboot-studygit
定義服務接口,打成 jar 包讓消費者依賴,服務者實現接口。該工程只有接口定義以及 model 對象。@Data 屬於lombok 開源庫提供的特性,方便開發。github
@Data public class User implements Serializable { private Long id; private String username; }
public interface UserProvider { List<User> listUser(); }
引入spring-boot-starter,dubbo-api 接口就是咱們上面提到的 接口定義 jar ,dubbo-spring-boot-starter ,dubbo-dependencies-zookeeper。web
<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>
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 的。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); } }
咱們要依賴 spring-boot-starter-web 提供http rest接口給前端調用。同時內部經過 Dubbo 實現 RPC調用服務提供者。apache
<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>
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 List<User> listUser() { return userProvider.listUser(); } }
@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.htmljson
歡迎你們討論糾正,郵箱:zero_develop@163.com 。點贊與關注微信公衆號是咱們前進的動力。