操作系统:deepin15.9桌面版
Dubbo(简介):
- 一款分布式服务框架
- 高性能和透明化的RPC远程服务调用方案
- SOA服务治理方案
每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。
Dubbo(框架):

Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。
调用流程
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
选择Dubbo注册中心:
(注册中心可以是zookeeper,Redis,Simple,Multicast,Simple
本文选择zookeeper)
思路解析:
(1.新建maven普通工程Interface,新建包和公共service接口,最后maven install安装到本地Repository中,提供给provider和comsumer。
2.新建maven普通工程provider,加入Interface的依赖和其他相关依赖。
3.新建maven普通工程consumer,加入Interface的依赖和其他相关依赖。
4.打开Tomcat和配置dubbo-admin,用来监控和管理。
)
安装工作:
1.安装zookeeper:
//下载和解压安装包
jimsun@jimsun-PC:~$ cd /home/jimsun/Downloads
jimsun@jimsun-PC:~/Downloads$ wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
jimsun@jimsun-PC:~/Downloads$ tar -zxvf zookeeper-3.4.13.tar.gz
//安装(将文件移动到/usr/local/zookeeper文件夹中,方便管理)
root@jimsun-PC:/home/jimsun/Downloads# mkdir /usr/local/zookeeper
root@jimsun-PC:/home/jimsun/Downloads# mv zookeeper-3.4.13/* /usr/local/zookeeper
//环境配置
root@jimsun-PC:/home/jimsun/Downloads# vim /etc/profile
//修改profile文件,
//加入:export PATH="/usr/local/zookeeper/bin:$PATH"
//使修改
root@jimsun-PC:/usr/local/zookeeper/conf# source /etcprofile的配置生效:
//配置文件设置:(将conf中的zoo_sample.cfg拷贝为zoo.cfg)
root@jimsun-PC:/usr/local/zookeeper# cd conf
root@jimsun-PC:/usr/local/zookeeper/conf# cp zoo_sample.cfg zoo.cfg
//启动和检查状态:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@jimsun-PC:/usr/local/zookeeper/conf# zkServer.sh status
ZooKeeper JMX enabled by default
配置文件:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
客户端连接:
root@jimsun-PC:/usr/local/zookeeper/conf# zkCli.sh -server 127.0.0.1:2181
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
Connecting to 127.0.0.1:2181
2019-01-25 10:28:19,520 [myid:] - INFO [main:Environment@100] - Client
......
2.maven新建Interface工程并打包
新建DemoService接口,如下所示:

pom.xml:
<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.0</modelVersion>
<groupId>com.jimsun</groupId>
<artifactId>service.interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
maven install:

出现错误1:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project autotest_fchtgl: Compilation failure..............
原因:
对这个问题其实报错中已经说的很清楚了,看第一条最后的 Perhaps you are running on a JRE rather than a JDK?
就是说你可能编译在一个JRE而不是JDK上,maven 编译是要JDK的,可能你的编译器配置了一个jre路径。
在eclipse中,选择window→preference→java→Installed JREs 点add添加你的jdk路径,选jdk而不是jre,之前的报错原因就出在这里。

上述是因为安装Eclipse时默认安装的jre....,需要自己安装jdk)
https://www.cnblogs.com/liugh/p/6623530.html
再进行上述操作。
错误2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1
原因:程的buid path的jdk版本低:

maven新建provider工程:

加入依赖:
<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.0</modelVersion>
<groupId>com.jimsun</groupId>
<artifactId>provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<dubbo.version>2.6.5</dubbo.version>
</properties>
<dependencies>
<!--加入上述建立的Interface包依赖,以便可以使用公共接口-->
<dependency>
<groupId>com.jimsun</groupId>
<artifactId>service.interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.32.Final</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
</project>
新建Service公共接口实现类:
package provider;
import java.util.ArrayList;
import java.util.List;
public class DemoProvider implements ServiceInterface.DemoService{
public List<Integer> getId() {
// TODO Auto-generated method stub
List<Integer> list=new ArrayList<Integer>();
list.add(66);
return list;
}
}
新建Provider.xml(配置bean,包括注册....)
<?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-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="demotest-provider" owner="programmer" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 接口-->
<dubbo:service interface="ServiceInterface.DemoService" ref="demoService" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="demoService" class="provider.DemoProvider"></bean>
</beans>
实现启动类:
package provider;
import java.io.IOException;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class DemoMain {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("Provider.xml");
System.out.println(context.getDisplayName() + ": here");
context.start();
System.out.println("服务已经启动...");
System.in.read();
}
}
运行后效果如下:

maven新建Consumer工程:

pom.xml(和上述相同)
.......
新建Consumer.xml:
<?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="demotest-consumer" owner="programmer" organization="dubbox"/>
<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的接口-->
<dubbo:reference id="permissionService" interface="ServiceInterface.DemoService"/>
</beans>
新建类执行
package comsumer;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ServiceInterface.DemoService;
public class DemoMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
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.getId());
}
}
dubbo-admin:
1.dubbo-admin-2.6.0.war 下载
下载地址:链接:https://pan.baidu.com/s/1ggeIIHX 密码:ck4h
2.部署到Tomcat
复制dubbo-admin-2.6.0.war,到tomcat的webapps目录下
3.运行startup.sh打开Tomcat,再关闭,会在webapps目录下产生dubbo-admin-2.6.0目录,
再修改dubbo.properties:

重新运行Tomcat:
打开链接:http://localhost:8080/dubbo-admin-2.6.0/

登陆后:

本文详细介绍了使用Dubbo、Spring和maven构建分布式服务的步骤,包括服务提供者、消费者、注册中心的角色和调用流程。在过程中遇到的JRE而非JDK编译问题及解决办法,以及如何配置Zookeeper作为注册中心。同时,指导了如何创建和运行服务提供者与消费者工程,以及部署和使用dubbo-admin进行监控。
1052

被折叠的 条评论
为什么被折叠?



