Dubbo应用_开发教程
- 格式:ppt
- 大小:633.50 KB
- 文档页数:21


dubbo远程调用实例
摘要:
一、Dubbo简介与架构
二、Dubbo远程调用原理
1.服务暴露
2.服务引入
3.服务调用流程
三、Dubbo远程调用实例
1.编写提供者
2.编写消费者
3.运行并提供远程调用
正文:
一、Dubbo简介与架构
Dubbo是一款高性能的Java RPC框架,起源于阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架。
Dubbo可以与Spring框架无缝集成,提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。
二、Dubbo远程调用原理
1.服务暴露
服务提供者需要暴露服务接口,并在注册中心(如ZooKeeper)注册该服务。
服务提供者将服务接口的实现类包装为一个Dubbo接口,并发布到注册
中心。
2.服务引入
服务消费者从注册中心获取服务提供者的信息,包括服务地址、协议等。
服务消费者通过Dubbo的客户端SDK与服务提供者建立连接。
3.服务调用流程
服务消费者通过Dubbo客户端发起远程调用,请求服务提供者执行某个方法。
服务提供者接收到请求后,执行相应的方法并返回结果。
服务消费者收到结果后,完成远程调用。
三、Dubbo远程调用实例
以下是一个简单的Dubbo远程调用实例,分为提供者和消费者两部分。
nacos中dubbo服务发现和调用示例流程Nacos是一个开源的服务发现和配置管理平台,它提供了Dubbo服务发现和调用的示例流程。
在本文中,我们将详细介绍如何在Nacos中使用Dubbo进行服务发现和调用。
首先,安装和配置Nacos。
可以在Nacos官方网站上找到最新的安装包,根据操作系统的不同进行安装。
安装完成后,运行Nacos,并确保它正常工作。
接下来,我们需要在Nacos中注册和发布Dubbo服务。
在配置文件中,我们需要指定Dubbo的协议、端口和服务接口。
例如,我们可以创建一个名为erService的用户服务接口,并在Nacos中注册它。
这将使得其他应用程序能够发现和调用这个服务。
一旦服务注册完成,我们可以使用Dubbo客户端来发现和调用服务。
Dubbo提供了一个注册中心来管理服务的地址,我们可以使用Nacos作为Dubbo的注册中心。
在Dubbo的配置文件中,我们需要指定Nacos的地址和服务接口。
通过连接到Nacos注册中心,Dubbo将能够从中获取我们在Nacos中注册的服务。
当调用Dubbo服务时,我们需要使用Dubbo的调用接口进行调用。
通过指定服务接口和方法,Dubbo会根据负载均衡策略选择一个可用的服务提供者,并将请求转发给它。
在调用结束后,Dubbo将返回结果给调用方。
总结一下,使用Nacos进行Dubbo服务发现和调用的示例流程如下:首先,安装和配置Nacos;然后在Nacos中注册和发布Dubbo服务;最后,使用Dubbo客户端发现和调用服务。
通过这个流程,我们可以使应用程序之间能够方便地进行服务间的通信和调用。
Dubbo服务的开发流程Dubbo是一个分布式服务框架,可以帮助我们快速构建高性能、可扩展的分布式应用。
在开发Dubbo服务时,需要按照以下步骤和流程进行。
1. 环境准备在开始开发Dubbo服务之前,需要进行一些环境准备工作。
1.1 安装JDK首先需要安装Java Development Kit (JDK),确保你的电脑上已经安装了合适的JDK版本,并配置好了环境变量。
1.2 下载Dubbo从Dubbo官网()下载最新版本的Dubbo,并解压到本地目录中。
1.3 创建Maven项目使用Maven创建一个新的Java项目,作为你的Dubbo服务的开发工程。
可以使用命令行或者IDE来完成这个步骤。
2. 定义接口在Dubbo中,服务提供者和消费者之间通过接口进行通信。
所以第一步是定义接口。
2.1 创建API模块在Maven项目中创建一个新的Module(如:my-api),用于存放接口定义和实体类等公共代码。
这个模块将被提供者和消费者共同引用。
2.2 定义接口在API模块中创建一个Java接口,用于定义服务的方法。
例如,我们可以创建一个UserService接口,其中包含一些用户相关的方法。
package com.example.api;public interface UserService {User getUserById(int id);List<User> getAllUsers();void addUser(User user);}3. 编写服务提供者在Dubbo中,服务提供者是实际提供服务的一方。
3.1 创建Provider模块在Maven项目中创建一个新的Module(如:my-provider),用于实现服务提供者相关代码。
3.2 引入依赖在Provider模块的pom.xml文件中,引入Dubbo和API模块的依赖。
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>com.example</groupId><artifactId>my-api</artifactId><version>${project.version}</version></dependency>3.3 配置Dubbo在Provider模块中创建一个名为dubbo.properties(或dubbo.yml)的配置文件,并配置Dubbo相关属性。
springspringboot整合dubbo详细教程⽬录⼀、基本使⽤⼆、spring整合dubbo2.1 spring-common模块:2.2 spring-user模块:2.3 spring-order模块:2.4 效果三、springboot整合dubbo3.1 boot-common模块:3.2 boot-user模块:3.3 boot-order模块:3.4 效果⼀、基本使⽤需求:某个电商系统,订单服务需要调⽤⽤户服务获取某个⽤户的所有地址;我们现在需要创建两个服务模块进⾏测试模块功能订单服务web模块创建订单等⽤户服务service模块查询⽤户地址等测试预期结果:订单服务web模块在A服务器,⽤户服务模块在B服务器,A可以远程调⽤B的功能。
⼆、spring整合dubbo以下使⽤XML 配置的⽅式,更多配置⽅式见2.1 spring-common模块:公共接⼝层(model,service,exception…),定义公共接⼝,也可以导⼊公共依赖UserAddress.java:⽤户地址实体类public class UserAddress implements Serializable {private Integer id;private String userAddress;private String userId;private String consignee;private String phoneNum;private String isDefault;....}IOrderService.java:订单接⼝public interface IOrderService {/*** ⽤户下单* @param userId*/UserAddress placeOrder(int userId);}IUserService.java:⽤户接⼝public interface IUserService {/*** 根据⽤户id获取⽤户地址* @param userId* @return*/UserAddress getUserAddById(int userId);}pom.xml:通⽤的依赖,引⼊dubbo和zkclient<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <parent><artifactId>dubboStudy</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>spring-common</artifactId><properties><piler.source>8</piler.source><piler.target>8</piler.target></properties><dependencies><!--dubbo --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.5.10</version></dependency><!--zookeeper --><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency></dependencies></project>2.2 spring-user模块:⽤户业务,作为服务提供者pom.xml:引⼊通⽤模块,可以使⽤定义的接⼝<dependency><groupId>org.example</groupId><artifactId>spring-common</artifactId><version>1.0-SNAPSHOT</version></dependency>UserServiceImpl.xml:IUserService的实现类,供远程调⽤public class UserServiceImpl implements IUserService {@Overridepublic UserAddress getUserAddById(int userId) {UserAddress userAddress = new UserAddress();userAddress.setUserAddress("上海市宝⼭区");return userAddress;}}provider.xml:dubbo配置信息<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:dubbo="/schema/dubbo"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/dubbo /schema/dubbo/dubbo.xsd/schema/dubbo /schema/dubbo/dubbo.xsd"><!--1、指定当前服务/应⽤的名字(同样的服务名字相同,不要和别的服务同名)--><dubbo:application name="spring-user"/><!--2、指定注册中⼼的位置--><!--<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>--><dubbo:registry address="zookeeper://192.168.31.136:2181"/><!--3、指定通信规则(通信协议? 服务端⼝)--><dubbo:protocol name="dubbo" port="20880"/><!--4、暴露服务让别⼈调⽤ ref指向服务的真正实现对象--><bean id="userServiceImpl" class="erServiceImpl"/><!--服务的实现--><dubbo:service interface="me.nic.service.IUserService" ref="userServiceImpl"/></beans>ConsumerRun.java:启动:public class ConsumerRun {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("consumer.xml");IOrderService orderService = applicationContext.getBean(IOrderService.class);orderService.placeOrder(1);System.in.read();}}2.3 spring-order模块:订单业务,作为服务消费者pom.xml:引⼊通⽤模块,可以使⽤定义的接⼝,同1.2OrderServiceImpl.xml:IOrderService的实现类,其中远程调⽤userService@Servicepublic class OrderServiceImpl implements IOrderService {@Autowiredprivate IUserService userService;@Overridepublic UserAddress placeOrder(int userId) {// 远程调⽤,获取⽤户地址UserAddress userAddById = userService.getUserAddById(userId);// 下单System.out.println("⽤户地址:" + userAddById.getUserAddress());System.out.println("下单成功");return null;}}consumer.xml:dubbo配置信息<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xmlns:dubbo="/schema/dubbo"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd /schema/context /schema/context/spring-context-4.3.xsd/schema/dubbo /schema/dubbo/dubbo.xsd/schema/dubbo /schema/dubbo/dubbo.xsd"><!--包扫描--><context:component-scan base-package="me.nic.service.impl"/><!--指定当前服务/应⽤的名字(同样的服务名字相同,不要和别的服务同名)--><dubbo:application name="spring-order"/><!--指定注册中⼼的位置--><dubbo:registry address="zookeeper://192.168.31.136:2181"/><!--调⽤远程暴露的服务,⽣成远程服务代理--><dubbo:reference id="userService" interface="me.nic.service.IUserService"/></beans>ProviderRun.java:启动public class ProviderRun {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("classpath:provider.xml");System.in.read();}2.4 效果ProviderRun启动之后阻塞,ConsumerRun启动之后调⽤orderService.placeOrder(1),placeOrder中远程调⽤spring-user模块中的userService.getUserAddById(userId)获取⽤户地址:⽤户地址:上海市宝⼭区下单成功三、springboot整合dubbo3.1 boot-common模块:公共接⼝层(model,service,exception…),定义公共接⼝,也可以导⼊公共依赖UserAddress.java:⽤户地址实体类public class UserAddress implements Serializable {private Integer id;private String userAddress;private String userId;private String consignee;private String phoneNum;private String isDefault;....}IOrderService.java:订单接⼝public interface IOrderService {/*** ⽤户下单* @param userId*/UserAddress placeOrder(int userId);}IUserService.java:⽤户接⼝public interface IUserService {/*** 根据⽤户id获取⽤户地址* @param userId* @return*/UserAddress getUserAddById(int userId);pom.xml:通⽤的依赖,引⼊dubbo的starter<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 https:///xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.0</version><relativePath/></parent><groupId>com.example</groupId><artifactId>boot-common</artifactId><version>0.0.1-SNAPSHOT</version><name>boot-common</name><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.0</version></dependency></dependencies></project>3.2 boot-user模块:⽤户业务,作为服务提供者pom.xml:引⼊通⽤模块,可以使⽤定义的接⼝<dependency><groupId>org.example</groupId><artifactId>spring-common</artifactId><version>1.0-SNAPSHOT</version></dependency>UserServiceImpl.xml:IUserService的实现类,供远程调⽤@Service暴露dubbo的服务@Service@Componentpublic class UserServiceImpl implements IUserService {@Overridepublic UserAddress getUserAddById(int userId) {UserAddress userAddress = new UserAddress();userAddress.setUserAddress("上海市宝⼭区");return userAddress;}}application.properties:dubbo配置信息=boot-userdubbo.registry.address=192.168.31.136:2181dubbo.registry.protocol=zookeeper=dubbodubbo.protocol.port=20880BootUserApplication.java:启动:@EnableDubbo : 开启基于注解的dubbo功能@EnableDubbo@SpringBootApplicationpublic class BootUserApplication {public static void main(String[] args) {SpringApplication.run(BootUserApplication.class, args);}}3.3 boot-order模块:订单业务,作为服务消费者pom.xml:引⼊通⽤模块,可以使⽤定义的接⼝,同1.2<dependency><groupId>com.example</groupId><artifactId>boot-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>OrderServiceImpl.xml:IOrderService的实现类,其中远程调⽤userService@Reference:引⽤远程提供者服务@Servicepublic class OrderServiceImpl implements IOrderService {//引⽤远程提供者服务@Referenceprivate IUserService userService;@Overridepublic UserAddress placeOrder(int userId) {// 远程调⽤,获取⽤户地址UserAddress userAddById = userService.getUserAddById(userId);return userAddById;}}OrderController.java:web接⼝,调⽤OrderService:@Controllerpublic class OrderController {@AutowiredIOrderService orderService;@RequestMapping("/initOrder")@ResponseBodypublic UserAddress initOrder(@RequestParam("uid")int userId) {return orderService.placeOrder(userId);}}application.properties:dubbo配置信息server.port=8081=boot-orderdubbo.registry.address=zookeeper://192.168.31.136:2181BootOrderApplication.java:启动@EnableDubbo@SpringBootApplicationpublic class BootOrderApplication {public static void main(String[] args) {SpringApplication.run(BootOrderApplication.class, args);}}3.4 效果到此这篇关于springboot整合dubbo详细教程的⽂章就介绍到这了,更多相关springboot整合dubbo内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。