dubbo服务简单搭建
一、初识dubbo:
架构图:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
流程:
服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
注册中心选择:
dubbo支持多种类型的注册中心:
- Multicast注册中心
- Zookeeper注册中心
- Redis注册中心
- Simple注册中心
二、ZooKeeper
下载:https://archive.apache.org/dist/zookeeper/
windows安装:https://blog.csdn.net/tlk20071/article/details/52028945
三、服务Demo搭建
1、新建一个maven工程:结构如下
其中模块dubbo-api用于给提供服务模块dubbo-provider和消费服务dubbo-cosumer提供公用接口,各目录结构为:
模块dubbo-api简单测试代码如下:
package com.example.demo; public interface DemoService { String testService(); }
提供服务模块dubbo-provider:
pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.examplegroupId> <artifactId>dubbo-providerartifactId> <version>0.0.1-SNAPSHOTversion> <packaging>jarpackaging> <name>dubbo-providername> <description>Demo project for Spring Bootdescription> <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.0.0.RELEASEversion> <relativePath/> parent> <properties> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding> <java.version>1.8java.version> properties> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starterartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> dependency>
<dependency> <groupId>com.examplegroupId> <artifactId>dubbo-apiartifactId> <version>0.0.1-SNAPSHOTversion> dependency>
<dependency> <groupId>com.alibabagroupId> <artifactId>dubboartifactId> <version>2.4.10version> <exclusions> <exclusion> <artifactId>springartifactId> <groupId>org.springframeworkgroupId> exclusion> exclusions> dependency> <dependency> <groupId>com.101tecgroupId> <artifactId>zkclientartifactId> <version>0.3version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> build> project>
实现接口类:
package com.example.demo.impl; import com.example.demo.DemoService; public class DemoServiceimpl implements DemoService { @Override public String testService() { return "provider testService"; } }
启动类:
package com.example.demo.provider; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; public class Provider { public static void main(String[] args) {
//测试 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "classpath*:provider.xml"); context.start(); System.out.println("dubbo service begin to start"); try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-provider" owner="programmer" organization="dubbox"/> <dubbo:registry address="zookeeper://localhost:2181"/> <dubbo:protocol name="dubbo" port="20880" /> <dubbo:service interface="com.example.demo.DemoService" ref="demoService" protocol="dubbo" /> <bean id="demoService" class="com.example.demo.impl.DemoServiceimpl"/> beans>
消费服务dubbo-cosumer:
pom文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0modelVersion> <groupId>com.examplegroupId> <artifactId>duboo-consumerartifactId> <version>0.0.1-SNAPSHOTversion> <packaging>jarpackaging> <name>duboo-consumername> <description>Demo project for Spring Bootdescription> <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.0.0.RELEASEversion> <relativePath/> parent> <properties> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding> <java.version>1.8java.version> properties> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starterartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-testartifactId> <scope>testscope> dependency> <dependency> <groupId>com.examplegroupId> <artifactId>dubbo-apiartifactId> <version>0.0.1-SNAPSHOTversion> dependency> <dependency> <groupId>com.alibabagroupId> <artifactId>dubboartifactId> <version>2.4.10version> <exclusions> <exclusion> <artifactId>springartifactId> <groupId>org.springframeworkgroupId> exclusion> exclusions> dependency> <dependency> <groupId>com.101tecgroupId> <artifactId>zkclientartifactId> <version>0.3version> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> build> project>
启动类:
package com.example.demo.consumer; import com.example.demo.DemoService; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Consumer { public static void main(String[] args) { //测试服务 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml"); context.start(); System.out.println("consumer start"); DemoService demoService = context.getBean(DemoService.class); System.out.println("consumer"); System.out.println(demoService.testService()); } }
配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-consumer" owner="programmer" organization="dubbox"/> <dubbo:registry address="zookeeper://localhost:2181"/> <dubbo:reference id="demoService" interface="com.example.demo.DemoService"/> beans>
四、测试:
zookeeper服务启动后,先启动服务提供方dubbo-provider,再运行dubbo-consuner,效果如下: