Dubbo+Spring+maven入门

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

操作系统: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/

这里写图片描述

登陆后:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值