節(jié)點(diǎn)角色說(shuō)明
節(jié)點(diǎn) | 角色說(shuō)明 |
---|---|
Provider | 暴露服務(wù)的服務(wù)提供方 |
Consumer | 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方 |
Registry | 服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心 |
Monitor | 統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間的監(jiān)控中心 |
Container | 服務(wù)運(yùn)行的容器 |
調(diào)用關(guān)系說(shuō)明
開(kāi)發(fā)環(huán)境主要涉及以下方面:
具體代碼可以查看 github 的 dubbo 模塊:https://github.com/UniqueDong/springboot-study
定義服務(wù)接口,打成 jar 包讓消費(fèi)者依賴(lài),服務(wù)者實(shí)現(xiàn)接口。該工程只有接口定義以及 model 對(duì)象。@Data 屬于lombok 開(kāi)源庫(kù)提供的特性,方便開(kāi)發(fā)。
@Datapublic 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。
<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 服務(wù)連接端口 port: 2181# dubbo 配置dubbo: # 注冊(cè)中心配置 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 協(xié)議配置 protocol: # -1 表示使用隨機(jī)未被占用的端口 port: -1 name: dubbo scan: # dubbo 服務(wù)提供者實(shí)現(xiàn)類(lèi)所在包 base-packages: com.zero.provider.impl
實(shí)現(xiàn) api 定義的接口
注意 @Service 是 Dubbo 的,不要導(dǎo)入了 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); }}
我們要依賴(lài) spring-boot-starter-web 提供http rest接口給前端調(diào)用。同時(shí)內(nèi)部通過(guò) Dubbo 實(shí)現(xiàn) RPC調(diào)用服務(wù)提供者。
<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: 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 # 是否檢查服務(wù)提供者有效 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(); }}
@RestController@RequestMapping("/users")public class UserController { @Autowired private UserService userService; @GetMapping public Object listUser() { List<User> list = userService.listUser(); return list; }}
各種具體協(xié)議、注冊(cè)中心、多注冊(cè)中心、超時(shí)等配置可以查看官方文檔http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
歡迎大家討論糾正,郵箱:zero_develop@163.com 。點(diǎn)贊與關(guān)注微信公眾號(hào)是我們前進(jìn)的動(dòng)力。
聯(lián)系客服