Dubbo应用_开发教程

合集下载

dubbo远程调用实例

dubbo远程调用实例

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是一个开源的服务发现和配置管理平台,它提供了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服务的开发流程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详细教程

springspringboot整合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内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

分布式服务框架dubbodubbox入门示例

分布式服务框架dubbodubbox入门示例

分布式服务框架dubbodubbox⼊门⽰例dubbo是⼀个分布式的服务架构,可直接⽤于⽣产环境作为SOA服务框架。

淘宝将这个项⽬开源出来以后,得到了不少同⾏的⽀持,包括:不管如何,能在阿⾥、当当、京东这些⼤型⽹站正式使⽤的框架,总不⾄于差到哪⾥去。

本⽂下⾯的⽰例均基于当当的dubbox版本,由于dubbox并没向maven提交编译后的jar包,所以只能从github clone代码到本地编译得到jar 包。

编译及测试步骤:(以下步骤全在windows环境中完成)1.本机先安装github on Windows的客户端,将在path路径中,把git.exe加进去3. mvn install -Dmaven.test.skip=true 跳过测试编译4.在本机,参考zoo.cfg如下:tickTime=2000initLimit=10syncLimit=5dataDir=D:/java/zookeeper-3.4.6/datadataLogDir=D:/java/zookeeper-3.4.6/logclientPort=2181server.1=localhost:2287:3387然后输⼊ bin/zkServer.cmd 启⽤zookeeper5. intellij Idea中导⼊源码6.运⾏ \dubbox\dubbo-demo\dubbo-demo-provider\src\test\java\com\alibaba\dubbo\demo\provider\DemoProvider.java把服务提供⽅跑起来,成功后,可以在ZK⾥,⽤ ls / 看下,会发现zk⾥多出了⼀个dubbo的节点,所有服务全注册在这⾥了7.运⾏\dubbox\dubbo-demo\dubbo-demo-consumer\src\test\java\com\alibaba\dubbo\demo\consumer\DemoConsumer.java服务消费⽅调⽤测试,可以看console⾥的输出8.运⾏\dubbox\dubbo-demo\dubbo-demo-consumer\src\test\java\com\alibaba\dubbo\demo\consumer\RestClient.java跑⼀下rest调⽤dubbox官⽅的⽰例,虽然已经很简单了,但是对于初次接触的⼈来讲,仍然略显复杂,下⾯的代码在其基础上简化了⼀下:⼀、先定义服务接⼝及传输对象DTO项⽬结构如下代码:User.javapackage yjmyzz.dubbo.demo.api;import org.codehaus.jackson.annotate.JsonProperty;import javax.validation.constraints.Min;import javax.validation.constraints.NotNull;import javax.validation.constraints.Size;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import java.io.Serializable;@XmlRootElement@XmlAccessorType(XmlAccessType.FIELD)public class User implements Serializable {@NotNull@Min(1L)private Long id;@JsonProperty("username")@XmlElement(name = "username")@NotNull@Size(min = 6, max = 50)private String name;public User() {}public User(Long id, String name) {this.id = id; = name;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}@Overridepublic String toString() {return "User (" +"id=" + id +", name='" + name + '\'' +')';}}UserService.javapackage yjmyzz.dubbo.demo.api;public interface UserService {User getUser(Long id);}UserRestService.javapackage yjmyzz.dubbo.demo.api;import javax.validation.constraints.Min;public interface UserRestService {User getUser(@Min(value = 1L, message = "User ID must be greater than 1") Long id);}pom.xml1<?xml version="1.0" encoding="UTF-8"?>2<project xmlns="/POM/4.0.0"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> 56<modelVersion>4.0.0</modelVersion>78<groupId>blogs.yjmyzz</groupId>9<artifactId>dubbo-hello-api</artifactId>10<version>0.1</version>1112<dependencies>1314<dependency>15<groupId>com.alibaba</groupId>16<artifactId>dubbo</artifactId>17<version>2.8.4</version>18</dependency>1920<dependency>21<groupId>javax.validation</groupId>22<artifactId>validation-api</artifactId>23<version>1.0.0.GA</version>24</dependency>2526<dependency>27<groupId>javax.annotation</groupId>28<artifactId>javax.annotation-api</artifactId>29<version>1.2</version>30</dependency>3132<dependency>33<groupId>org.codehaus.jackson</groupId>34<artifactId>jackson-mapper-asl</artifactId>35<version>1.9.12</version>36</dependency>3738</dependencies>39</project>View Code⼆、定义服务⽣产者(即:服务接⼝的实现⽅)UserServiceImpl.javapackage yjmyzz.dubbo.demo.provider;import er;import erService;public class UserServiceImpl implements UserService {public User getUser(Long id) {return new User(id, "username" + id);}}UserRestServiceImpl.javapackage yjmyzz.dubbo.demo.provider;import com.alibaba.dubbo.rpc.RpcContext;import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;import er;import erRestService;import erService;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.ws.rs.*;import javax.ws.rs.core.MediaType;@Path("users")@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})public class UserRestServiceImpl implements UserRestService {private UserService userService;public void setUserService(UserService userService) {erService = userService;}@GET@Path("{id : \\d+}")public User getUser(@PathParam("id") Long id) {if (RpcContext.getContext().getRequest(HttpServletRequest.class) != null) {System.out.println("Client IP address from RpcContext: " + RpcContext.getContext().getRequest(HttpServletRequest.class).getRemoteAddr()); }if (RpcContext.getContext().getResponse(HttpServletResponse.class) != null) {System.out.println("Response object from RpcContext: " + RpcContext.getContext().getResponse(HttpServletResponse.class));}return userService.getUser(id);}}DemoProvider.javapackage yjmyzz.dubbo.demo.provider;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;public class DemoProvider {public static void main(String[] args) throws IOException {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:META-INF/spring/*.xml");context.start();System.out.println("服务已经启动...");System.in.read();}}配置⽂件:resources\META-INF\spring\dubbo-demo-provider.xml1<?xml version="1.0" encoding="UTF-8"?>23<beans xmlns="/schema/beans"4 xmlns:xsi="/2001/XMLSchema-instance"5 xmlns:dubbo="/schema/dubbo"6 xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd7 /schema/dubbo /schema/dubbo/dubbo.xsd">89<dubbo:application name="demo-provider" owner="programmer" organization="dubbox"/>1011<dubbo:registry address="zookeeper://127.0.0.1:2181"/>1213<dubbo:protocol name="dubbo" serialization="kryo" optimizer="yjmyzz.dubbo.demo.api.SerializationOptimizerImpl"/>1415<!-- use tomcat server -->16<dubbo:protocol name="rest" port="8888" threads="500" contextpath="services" server="tomcat" accepts="500"17 extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>181920<dubbo:service interface="erService" ref="userService" protocol="dubbo"/>2122<dubbo:service interface="erRestService" ref="userRestService" protocol="rest" validation="true"/>2324<bean id="userService" class="erServiceImpl"/>2526<bean id="userRestService" class="erRestServiceImpl">27<property name="userService" ref="userService"/>28</bean>293031</beans>View Codepom.xml1<?xml version="1.0" encoding="UTF-8"?>2<project xmlns="/POM/4.0.0"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">56<modelVersion>4.0.0</modelVersion>78<groupId>blogs.yjmyzz</groupId>9<artifactId>dubbo-hello-provider</artifactId>10<version>0.1</version>1112<dependencies>1314<!--公⽤的服务接⼝-->15<dependency>16<groupId>blogs.yjmyzz</groupId>17<artifactId>dubbo-hello-api</artifactId>18<version>0.1</version>19</dependency>2021<dependency>22<groupId>com.alibaba</groupId>23<artifactId>dubbo</artifactId>24<version>2.8.4</version>25</dependency>2627<dependency>28<groupId>org.javassist</groupId>29<artifactId>javassist</artifactId>30<version>3.15.0-GA</version>31</dependency>3233<dependency>34<groupId>org.apache.mina</groupId>35<artifactId>mina-core</artifactId>36<version>1.1.7</version>41<artifactId>grizzly-core</artifactId>42<version>2.1.4</version>43</dependency>4445<dependency>46<groupId>org.apache.httpcomponents</groupId> 47<artifactId>httpclient</artifactId>48<version>4.2.1</version>49</dependency>5051<dependency>52<groupId>com.alibaba</groupId>53<artifactId>fastjson</artifactId>54<version>1.1.39</version>55</dependency>5657<dependency>58<groupId>com.thoughtworks.xstream</groupId>59<artifactId>xstream</artifactId>60<version>1.4.1</version>61</dependency>6263<dependency>64<groupId>org.apache.bsf</groupId>65<artifactId>bsf-api</artifactId>66<version>3.1</version>67</dependency>6869<dependency>70<groupId>org.apache.zookeeper</groupId>71<artifactId>zookeeper</artifactId>72<version>3.4.6</version>73</dependency>7475<dependency>76<groupId>com.github.sgroschupf</groupId>77<artifactId>zkclient</artifactId>78<version>0.1</version>79</dependency>8081<dependency>82<groupId>org.apache.curator</groupId>83<artifactId>curator-framework</artifactId>84<version>2.5.0</version>85</dependency>8687<dependency>88<groupId>com.googlecode.xmemcached</groupId> 89<artifactId>xmemcached</artifactId>90<version>1.3.6</version>91</dependency>9293<dependency>94<groupId>org.apache.cxf</groupId>95<artifactId>cxf-rt-frontend-simple</artifactId>96<version>2.6.1</version>97</dependency>9899<dependency>100<groupId>org.apache.cxf</groupId>101<artifactId>cxf-rt-transports-http</artifactId>102<version>2.6.1</version>103</dependency>104105<dependency>106<groupId>org.apache.thrift</groupId>107<artifactId>libthrift</artifactId>108<version>0.8.0</version>109</dependency>110111<dependency>112<groupId>com.caucho</groupId>113<artifactId>hessian</artifactId>114<version>4.0.7</version>115</dependency>116117<dependency>118<groupId>javax.servlet</groupId>119<artifactId>javax.servlet-api</artifactId>120<version>3.1.0</version>125<artifactId>jetty</artifactId>126<version>6.1.26</version>127<exclusions>128<exclusion>129<groupId>org.mortbay.jetty</groupId>130<artifactId>servlet-api</artifactId>131</exclusion>132</exclusions>133</dependency>134135<dependency>136<groupId>log4j</groupId>137<artifactId>log4j</artifactId>138<version>1.2.16</version>139</dependency>140141<dependency>142<groupId>org.slf4j</groupId>143<artifactId>slf4j-api</artifactId>144<version>1.6.2</version>145</dependency>146147<dependency>148<groupId>redis.clients</groupId>149<artifactId>jedis</artifactId>150<version>2.1.0</version>151</dependency>152153<dependency>154<groupId>javax.validation</groupId>155<artifactId>validation-api</artifactId>156<version>1.0.0.GA</version>157</dependency>158159<dependency>160<groupId>org.hibernate</groupId>161<artifactId>hibernate-validator</artifactId>162<version>4.2.0.Final</version>163</dependency>164165<dependency>166<groupId>javax.cache</groupId>167<artifactId>cache-api</artifactId>168<version>0.4</version>169</dependency>170171<dependency>172<groupId>org.jboss.resteasy</groupId>173<artifactId>resteasy-jaxrs</artifactId>174<version>3.0.7.Final</version>175</dependency>176177<dependency>178<groupId>org.jboss.resteasy</groupId>179<artifactId>resteasy-client</artifactId>180<version>3.0.7.Final</version>181</dependency>182183<dependency>184<groupId>org.jboss.resteasy</groupId>185<artifactId>resteasy-netty</artifactId>186<version>3.0.7.Final</version>187</dependency>188189<dependency>190<groupId>org.jboss.resteasy</groupId>191<artifactId>resteasy-jdk-http</artifactId>192<version>3.0.7.Final</version>193</dependency>194195<dependency>196<groupId>org.jboss.resteasy</groupId>197<artifactId>resteasy-jackson-provider</artifactId> 198<version>3.0.7.Final</version>199</dependency>200201<dependency>202<groupId>org.jboss.resteasy</groupId>203<artifactId>resteasy-jaxb-provider</artifactId> 204<version>3.0.7.Final</version>208<groupId>org.apache.tomcat.embed</groupId>209<artifactId>tomcat-embed-core</artifactId>210<version>8.0.11</version>211</dependency>212213<dependency>214<groupId>org.apache.tomcat.embed</groupId>215<artifactId>tomcat-embed-logging-juli</artifactId>216<version>8.0.11</version>217</dependency>218219<dependency>220<groupId>com.esotericsoftware.kryo</groupId>221<artifactId>kryo</artifactId>222<version>2.24.0</version>223</dependency>224225<dependency>226<groupId>de.javakaffee</groupId>227<artifactId>kryo-serializers</artifactId>228<version>0.26</version>229</dependency>230231<dependency>232<groupId>de.ruedigermoeller</groupId>233<artifactId>fst</artifactId>234<version>1.55</version>235</dependency>236237</dependencies>238239240</project>View Code测试时,运⾏DemoProvider中的main⽅法即可启动服务,所有服务注册在ZooKeeper,层次结构类似下⾯这样:/dubbo/dubbo/erRestService/dubbo/erRestService/providers/dubbo/erRestService/configurators/dubbo/erService/dubbo/erService/providers/dubbo/erService/configurators三、服务消费⽅DemoConsumer.javapackage yjmyzz.dubbo.demo.consumer;import org.springframework.context.support.ClassPathXmlApplicationContext;import erService;import javax.ws.rs.client.Client;import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.client.WebTarget;import javax.ws.rs.core.Response;public class DemoConsumer {public static void main(String[] args) {final String port = "8888";//测试Rest服务getUser("http://localhost:" + port + "/services/users/1.json");getUser("http://localhost:" + port + "/services/users/1.xml");//测试常规服务ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:META-INF/spring/*.xml");context.start();UserService userService = context.getBean(UserService.class);System.out.println(userService.getUser(1L));}private static void getUser(String url) {System.out.println("Getting user via " + url);Client client = ClientBuilder.newClient();WebTarget target = client.target(url);Response response = target.request().get();try {if (response.getStatus() != 200) {throw new RuntimeException("Failed with HTTP error code : " + response.getStatus());}System.out.println("Successfully got result: " + response.readEntity(String.class));} finally {response.close();client.close();}}}配置⽂件:resources\META-INF\spring\dubbo-hello-consumer.xml1<?xml version="1.0" encoding="UTF-8"?>2<beans xmlns="/schema/beans"3 xmlns:xsi="/2001/XMLSchema-instance"4 xmlns:dubbo="/schema/dubbo"5 xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.5.xsd6 /schema/dubbo /schema/dubbo/dubbo.xsd">78<dubbo:application name="demo-consumer" owner="programmer" organization="dubbox"/>910<dubbo:registry address="zookeeper://127.0.0.1:2181"/>1112<dubbo:reference id="userRestService" interface="erRestService"/>1314<dubbo:reference id="userService" interface="erService"/>1516</beans>View Codepom.xml1<?xml version="1.0" encoding="UTF-8"?>2<project xmlns="/POM/4.0.0"3 xmlns:xsi="/2001/XMLSchema-instance"4 xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">56<modelVersion>4.0.0</modelVersion>78<groupId>blogs.yjmyzz</groupId>9<artifactId>dubbo-hello-consumer</artifactId>10<version>0.1</version>111213<dependencies>14<!--公⽤的服务接⼝-->15<dependency>16<groupId>blogs.yjmyzz</groupId>17<artifactId>dubbo-hello-api</artifactId>18<version>0.1</version>19</dependency>202122<dependency>23<groupId>com.alibaba</groupId>24<artifactId>dubbo</artifactId>25<version>2.8.4</version>26</dependency>2728<dependency>29<groupId>org.javassist</groupId>30<artifactId>javassist</artifactId>31<version>3.15.0-GA</version>32</dependency>3334<dependency>35<groupId>org.apache.mina</groupId>36<artifactId>mina-core</artifactId>37<version>1.1.7</version>38</dependency>3940<dependency>41<groupId>org.glassfish.grizzly</groupId>42<artifactId>grizzly-core</artifactId>4546<dependency>47<groupId>org.apache.httpcomponents</groupId> 48<artifactId>httpclient</artifactId>49<version>4.2.1</version>50</dependency>5152<dependency>53<groupId>com.alibaba</groupId>54<artifactId>fastjson</artifactId>55<version>1.1.39</version>56</dependency>5758<dependency>59<groupId>com.thoughtworks.xstream</groupId>60<artifactId>xstream</artifactId>61<version>1.4.1</version>62</dependency>6364<dependency>65<groupId>org.apache.bsf</groupId>66<artifactId>bsf-api</artifactId>67<version>3.1</version>68</dependency>6970<dependency>71<groupId>org.apache.zookeeper</groupId>72<artifactId>zookeeper</artifactId>73<version>3.4.6</version>74</dependency>7576<dependency>77<groupId>com.github.sgroschupf</groupId>78<artifactId>zkclient</artifactId>79<version>0.1</version>80</dependency>8182<dependency>83<groupId>org.apache.curator</groupId>84<artifactId>curator-framework</artifactId>85<version>2.5.0</version>86</dependency>8788<dependency>89<groupId>com.googlecode.xmemcached</groupId> 90<artifactId>xmemcached</artifactId>91<version>1.3.6</version>92</dependency>9394<dependency>95<groupId>org.apache.cxf</groupId>96<artifactId>cxf-rt-frontend-simple</artifactId>97<version>2.6.1</version>98</dependency>99100<dependency>101<groupId>org.apache.cxf</groupId>102<artifactId>cxf-rt-transports-http</artifactId>103<version>2.6.1</version>104</dependency>105106<dependency>107<groupId>org.apache.thrift</groupId>108<artifactId>libthrift</artifactId>109<version>0.8.0</version>110</dependency>111112<dependency>113<groupId>com.caucho</groupId>114<artifactId>hessian</artifactId>115<version>4.0.7</version>116</dependency>117118<dependency>119<groupId>javax.servlet</groupId>120<artifactId>javax.servlet-api</artifactId>121<version>3.1.0</version>122</dependency>123124<dependency>125<groupId>org.mortbay.jetty</groupId>126<artifactId>jetty</artifactId>129<exclusion>130<groupId>org.mortbay.jetty</groupId>131<artifactId>servlet-api</artifactId>132</exclusion>133</exclusions>134</dependency>135136<dependency>137<groupId>log4j</groupId>138<artifactId>log4j</artifactId>139<version>1.2.16</version>140</dependency>141142<dependency>143<groupId>org.slf4j</groupId>144<artifactId>slf4j-api</artifactId>145<version>1.6.2</version>146</dependency>147148<dependency>149<groupId>redis.clients</groupId>150<artifactId>jedis</artifactId>151<version>2.1.0</version>152</dependency>153154<dependency>155<groupId>javax.validation</groupId>156<artifactId>validation-api</artifactId>157<version>1.0.0.GA</version>158</dependency>159160<dependency>161<groupId>org.hibernate</groupId>162<artifactId>hibernate-validator</artifactId>163<version>4.2.0.Final</version>164</dependency>165166<dependency>167<groupId>javax.cache</groupId>168<artifactId>cache-api</artifactId>169<version>0.4</version>170</dependency>171172<dependency>173<groupId>org.jboss.resteasy</groupId>174<artifactId>resteasy-jaxrs</artifactId>175<version>3.0.7.Final</version>176</dependency>177178<dependency>179<groupId>org.jboss.resteasy</groupId>180<artifactId>resteasy-client</artifactId>181<version>3.0.7.Final</version>182</dependency>183184<dependency>185<groupId>org.jboss.resteasy</groupId>186<artifactId>resteasy-netty</artifactId>187<version>3.0.7.Final</version>188</dependency>189190<dependency>191<groupId>org.jboss.resteasy</groupId>192<artifactId>resteasy-jdk-http</artifactId>193<version>3.0.7.Final</version>194</dependency>195196<dependency>197<groupId>org.jboss.resteasy</groupId>198<artifactId>resteasy-jackson-provider</artifactId> 199<version>3.0.7.Final</version>200</dependency>201202<dependency>203<groupId>org.jboss.resteasy</groupId>204<artifactId>resteasy-jaxb-provider</artifactId> 205<version>3.0.7.Final</version>206</dependency>207208<dependency>209<groupId>org.apache.tomcat.embed</groupId> 210<artifactId>tomcat-embed-core</artifactId>211<version>8.0.11</version>212</dependency>213214<dependency>215<groupId>org.apache.tomcat.embed</groupId>216<artifactId>tomcat-embed-logging-juli</artifactId>217<version>8.0.11</version>218</dependency>219220<dependency>221<groupId>com.esotericsoftware.kryo</groupId>222<artifactId>kryo</artifactId>223<version>2.24.0</version>224</dependency>225226<dependency>227<groupId>de.javakaffee</groupId>228<artifactId>kryo-serializers</artifactId>229<version>0.26</version>230</dependency>231232<dependency>233<groupId>de.ruedigermoeller</groupId>234<artifactId>fst</artifactId>235<version>1.55</version>236</dependency>237</dependencies>238239240</project>View Code其它注意事项:dubbo构架中,zk充着“服务注册中⼼”的⾓⾊,所以⽣产者与消费者的xml配置⽂件中,都要配置zk地址,如果zk采⽤集群部署时,配置写法参考下⾯这样:<dubbo:registry address="zookeeper://172.28.*.102:2181?backup=172.28.*.102:2182,172.28.*.102:2183"/>dubbo还有⼀个管理界⾯,⽤于服务治理,包括启⽤/禁⽤服务,设置服务的路由规则(即:A地址的Consumer直接调⽤B机器的Provider,⽽不是由负载均衡算法分配)等等。

dubbox的使用流程

dubbox的使用流程

dubbox的使用流程1. 确定项目需求和背景•确定使用dubbox的原因:Dubbox是一款开源的分布式服务框架,可以提供高性能和可靠的分布式服务。

•确定项目背景:项目需要构建一个分布式服务架构,需要解决服务之间的调用和通信问题。

2. dubbox的安装和配置•下载dubbox:从dubbox的官方网站或者github上下载dubbox的最新版本。

•解压dubbox:将下载的dubbox压缩包解压到目标文件夹。

•配置dubbox:编辑dubbo.properties文件,配置相应的参数,如注册中心地址、端口等。

3. 编写服务提供者•创建服务提供者项目:使用Eclipse或者IntelliJ IDEA等IDE创建一个Java项目。

•引入dubbox依赖:在项目的pom.xml文件中添加dubbox的依赖。

•编写服务接口:在项目中创建服务接口,并定义需要暴露的方法。

•实现服务接口:创建一个类实现服务接口,并实现接口中的方法。

•配置dubbox服务:在Spring配置文件中,配置dubbox的服务提供者,并将实现类作为服务实现。

4. 编写服务消费者•创建服务消费者项目:使用相同的IDE创建一个新的Java项目。

•引入dubbox依赖:在项目的pom.xml文件中添加dubbox的依赖。

•配置dubbox消费者:在Spring配置文件中,配置dubbox的服务消费者,并指定要消费的服务提供者的地址。

•调用服务:在代码中调用服务提供者的方法,实现服务消费。

5. 测试和部署•测试服务:启动服务提供者和消费者项目,调用服务接口,检查是否正常工作。

•部署服务:根据实际需求,将服务提供者和消费者部署到对应的服务器上,配置好相应的网络参数。

6. 监控和管理•监控服务:dubbox提供了Dubbo Admin控制台,可以通过该控制台监控服务的运行状态和性能。

•管理服务:Dubbo Admin控制台还可以用于管理服务,如添加、删除、修改服务的配置。

dubbo入门篇以及如何代码实现

dubbo入门篇以及如何代码实现

dubbo⼊门篇以及如何代码实现⼀、什么是dubboDubbo是Alibaba开源的分布式服务框架,它最⼤的特点是按照分层的⽅式来架构,使⽤这种⽅式可以使各个层之间解耦合Dubbo是阿⾥巴巴SOA服务化治理⽅案的核⼼框架,致⼒于提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理⽅案。

其核⼼部分包含:远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换⽅式。

集群容错: 提供基于接⼝⽅法的透明远程过程调⽤,包括多协议⽀持,以及软负载均衡,失败容错,地址路由,动态配置等集群⽀持。

⾃动发现: 基于注册中⼼⽬录服务,使服务消费⽅能动态的查找服务提供⽅,使地址透明,使服务提供⽅可以平滑增加或减少机器。

那么,Dubbo能做什么?1. 透明化的远程⽅法调⽤,底层封装了 Java NIO 通信框架 Netty、序列化及反序列化框架、以及应⽤层提供线程池和消息调度,使业务可以快速的实现跨进程的远程通信,就像调⽤本地服务那样去调⽤远程服务,⽽不需要关系底层的通信细节,例如链路的闪断、失败重试等,极⼤的提⾼了应⽤的开发效率。

2. 软负载均衡及容错机制,可以在内⽹替代 F5 等硬件负载均衡器,降低成本,减少单点。

3. 服务⾃动注册与发现,基于服务注册中⼼的订阅发布机制,不再需要写死服务提供⽅地址,注册中⼼基于接⼝名查询服务提供者的ip地址,并且能够平滑添加或删除服务提供者。

4. 服务治理,包括服务注册、服务降级、访问控制、动态配置路由规则、权重调节、负载均衡。

5. Spring 框架⽆缝集成、配置化发布服务。

Dubbo产⽣的背景随着互联⽹的发展,⽹站应⽤的规模不断扩⼤,常规的垂直应⽤架构已⽆法应对,分布式服务架构以及流动计算架构势在必⾏,亟需⼀个治理系统确保架构有条不紊的演进。

单⼀应⽤架构当⽹站流量很⼩时,只需⼀个应⽤,将所有功能都部署在⼀起,以减少部署节点和成本。

java中dubbo的用法

java中dubbo的用法

java中dubbo的用法
Dubbo是一个分布式服务框架,可以用于构建高性能和可扩展的微服务架构。

下面是一些Java中使用Dubbo的常见用法:
1. 定义服务接口:首先需要定义服务接口,即服务提供者和消费者都要遵守的约定。

可以使用Java的接口或者抽象类来定
义服务接口。

2. 配置Dubbo的相关参数:Dubbo通过配置文件的方式来配
置相关参数,例如服务注册中心地址、端口号、超时时间等。

可以使用XML或者注解的方式来配置。

3. 编写服务提供者代码:编写具体的服务实现类,并在服务提供者端配置Dubbo的相关注解(例如@Service和@Reference)来暴露服务接口。

4. 编写服务消费者代码:编写服务消费者代码,并在消费者端配置Dubbo的相关注解(例如@Service和@Reference)来引
用远程服务。

5. 运行和测试:最后,在服务提供者和消费者的机器上分别启动相应的代码,并进行测试。

除了以上的用法,Dubbo还支持一些高级特性,例如负载均衡、容错机制、集群容器等,可以根据实际需求进行配置和使用。

总结起来,使用Dubbo的步骤包括定义服务接口、配置
Dubbo参数、编写服务提供者和消费者代码,最后进行运行和测试。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

15
Dubbo常用配置
服务提供方bean配置16服务消费方配置17
Dubbo常用配置
注解方式配置
18
Dubbo常用配置
回调方式应用
19
Dubbo常用配置
结果集合并
20
结束
谢谢!
21
Dubbo基本架构
节点角色说明:
Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心 。 Container: 服务运行容器。
Dubbo项目的初步搭建
创建普通的java项目 导入依赖的jar文件 创建基本的spring,log4j等配置 文件
Dubbo能够解决的问题
透明化的远程方法调用,就像调用本地方 法一样调用远程方法,只需简单配置,没 有任何API侵入。 软负载均衡及容错机制,可在内网替代F5 等硬件负载均衡器。
服务自动注册与发现,不再需要写死服务 提供方地址,注册中心基于接口名查询服 务提供者的IP地址,并且能够平滑添加或删 除服务提供者。
6
Dubbo项目的初步搭建
相应实现的spring配置
7
Dubbo项目的初步搭建
将该实现发布为dubbo服务
8
Dubbo项目的初步搭建
启动dubbo服务
9
Dubbo项目的初步搭建
启动监控中心
10
Dubbo项目的初步搭建
启动注册中心
Dubbo项目的初步搭建
查看监控中心
Dubbo项目的初步搭建
Dubbo项目的初步搭建
创建文件目录 编写服务接口 编写服务提供者实现代码 配置服务提供者spring配置 配置服务消费者spring配置 将服务消费者接口及配置导出到服务消费者项目 启动监控中心 启动注册中心 启动服务提供者服务 启动服务消费者服务 完成服务调用
Dubbo项目的初步搭建
将服务消费方依赖jar导入 引用dubbo配置文件 启动服务
Dubbo项目的初步搭建
使用远程服务
14
Dubbo常用配置
服务提供方配置 <dubbo:registry address="zookeeper://192.168.7.202:2181" file="C:\dubbo\cache\demo-server.cache" />
服务接口 package com.liantuo.demo.client.service; public interface DemoService { public String sayHello(String name); } 为普通服务接口
Dubbo项目的初步搭建
服务提供者服务实现
服务实现具体的提供服务接口
相关文档
最新文档