最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

Dubbo实践-全球热推荐

来源:博客园
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  2  4   4.0.0 5    6     org.springframework.boot 7     spring-boot-starter-parent 8     2.7.12 9      10   11   com.mike.study12   dubbo-consumer13   0.0.1-SNAPSHOT14   dubbo-consumer15   Demo project for Spring Boot16   17     818   19   20     21       org.springframework.boot22       spring-boot-starter-web23     24 25     26       com.mike.study27       dubbo-api28       0.0.129     30 31     32       com.alibaba.spring.boot33       dubbo-spring-boot-starter34       2.0.035     36 37     38       com.101tec39       zkclient40       0.1041     42 43     44       org.apache.zookeeper45       zookeeper46       3.4.1047       48         49           org.slf4j50           slf4j-log4j1251         52         53           log4j54           log4j55         56       57     58 59     60       org.springframework.boot61       spring-boot-starter-test62       test63     64   65 66   67     68       69         org.springframework.boot70         spring-boot-maven-plugin71       72     73   74 75 

同样配置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,效果如下

关键词: