Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。--(摘自《百度百科》)
演示远程调用和服务自动注册和和发现。首先demo结构如图所示:
dubbo-api module提供接口服务,dubbo-consumer module是消费者,dubbo-provider module是服务提供者,dubbo-consumer和dubbo-provider同时依赖于dubbo-appi.
(相关资料图)
dubbo-api module仅仅提供接口,没有其他逻辑。
dubbo-api的pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.12 com.mike.study dubbo-api 0.0.1 dubbo-api Demo project for Spring Boot 8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
接口类UserService,设定一个login的方法。
import com.mike.study.domain.UserInfo;public interface UserService { UserInfo login(UserInfo userInfo);}
同时,方便统一管理对象,设定demain.UserInfo类, 由于实体类是要在网上传输,所以实体类是需要继承Serializable接口,否则会报错。
import java.io.Serializable;public class UserInfo implements Serializable { private String account; private String password; public String getAccount() { return account; } public void setAccount(String account) { this.account = account; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
至此,api module已经准备完毕。接下来创建provider,提供服务并且注册到zookeeper上。所以要事先准备好zookeeper,参考网上资料,这里不展开介绍安装教程。
dubbo-provider的pom.xml需要引入zookeeper和dubbo相关依赖。
4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.12 com.mike.study dubbo-provider 0.0.1 dubbo-provider Demo project for Spring Boot 8 org.springframework.boot spring-boot-starter-web com.mike.study dubbo-api 0.0.1 com.alibaba.spring.boot dubbo-spring-boot-starter 2.0.0 com.101tec zkclient 0.10 org.apache.zookeeper zookeeper 3.4.10 org.slf4j slf4j-log4j12 log4j log4j org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
配置application.yml文件,设置好zookeeper的地址,dubbo框架会把服务自动注册到zookeeper上,避免同时启动会和consumer的端口有冲突,需要设定provider的端口为8081。
1 spring: 2 dubbo: 3 application: 4 name: dubbo-provider 5 protocol: 6 name: dubbo 7 port: 20880 8 registry: 9 address: zookeeper://127.0.0.1:218110 server:11 port: 8081
接下来,实现服务的逻辑,这里简单修改下user信息后直接返回出去。
1 import com.alibaba.dubbo.config.annotation.Service; 2 import com.mike.study.api.UserService; 3 import com.mike.study.domain.UserInfo; 4 import org.springframework.stereotype.Component; 5 6 @Component 7 @Service 8 public class UserServiceImpl implements UserService { 9 @Override10 public UserInfo login(UserInfo userInfo) {11 UserInfo reUser = new UserInfo();12 reUser.setAccount("账号:"+ userInfo.getAccount());13 reUser.setPassword("密码:"+ userInfo.getPassword());14 15 return reUser;16 }17 }
这里用到了2个注解,@Component将当前类交给springboot容器管理,@Service是dubbo的注解,将接口注册到zookeeper上供订阅者使用。
注意,上面注解外,还需要在启动类添加注解来启动dubbo自动配置。
1 import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; 2 import org.springframework.boot.SpringApplication; 3 import org.springframework.boot.autoconfigure.SpringBootApplication; 4 import org.springframework.context.ConfigurableApplicationContext; 5 6 @SpringBootApplication 7 @EnableDubboConfiguration // 启用dubbo自动配置 8 public class DubboProviderApplication { 9 10 public static void main(String[] args) {11 ConfigurableApplicationContext12 context = SpringApplication.run(DubboProviderApplication.class, args);13 }14 15 }
自此,provider也准备好,最后看consumer如何消费服务。
dubbo-consumer由于是要冲zookeeper上拿到接口,所以也要引入zookeeper等相关依赖。
1 24 4.0.0 56 11org.springframework.boot 7spring-boot-starter-parent 82.7.12 910 com.mike.study 12dubbo-consumer 130.0.1-SNAPSHOT 14dubbo-consumer 15Demo project for Spring Boot 1617 198 1820 65 6621 24 25org.springframework.boot 22spring-boot-starter-web 2326 30 31com.mike.study 27dubbo-api 280.0.1 2932 36 37com.alibaba.spring.boot 33dubbo-spring-boot-starter 342.0.0 3538 42 43com.101tec 39zkclient 400.10 4144 58 59org.apache.zookeeper 45zookeeper 463.4.10 4748 5749 52org.slf4j 50slf4j-log4j12 5153 56log4j 54log4j 5560 64org.springframework.boot 61spring-boot-starter-test 62test 6367 74 7568 7369 72org.springframework.boot 70spring-boot-maven-plugin 71
同样配置application.yml,指定zookeeper和服务端口。
1 spring: 2 dubbo: 3 application: 4 name: dubbo-consumer 5 protocol: 6 name: dubbo 7 port: 20880 8 registry: 9 address: zookeeper://127.0.0.1:218110 server:11 port: 8082
添加一个controller层用来调用UserService服务,添加 @Reference注解拿到provider的远程接口。
1 import com.alibaba.dubbo.config.annotation.Reference; 2 import com.mike.study.api.UserService; 3 import com.mike.study.domain.UserInfo; 4 import org.springframework.web.bind.annotation.GetMapping; 5 import org.springframework.web.bind.annotation.RestController; 6 7 8 @RestController 9 public class UserController {10 @Reference11 UserService userService;12 13 @GetMapping("/login")14 public UserInfo login(UserInfo userInfo){15 UserInfo result = userService.login(userInfo);16 return result;17 }18 }
同样,consumer也要启动dubbo的自动配置。
1 import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; 2 import org.springframework.boot.SpringApplication; 3 import org.springframework.boot.autoconfigure.SpringBootApplication; 4 5 @SpringBootApplication 6 @EnableDubboConfiguration 7 public class DubboConsumerApplication { 8 9 public static void main(String[] args) {10 SpringApplication.run(DubboConsumerApplication.class, args);11 }12 13 }
依次跑起zookeeper,provider服务,consumer服务。查看zookeeper的节点,可以看到,consumer和provider节点。
在浏览器上访问consumer:http://localhost:8082/login?account=test&password=123,效果如下
上一篇 : 手摇手电筒什么牌子好_手电筒什么牌子的好 世界热门
下一篇 : 最后一页