dubbo入门学习

官方网址:http://dubbo.apache.org/zh-cn/index.html

学习可以参考官网中文文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html

1、Apache Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

1 如果项目表现层、服务层是不同的项目,可以使用dubbo实现两个系统之间的通信。服务层和表现层相互通信,使用dubbo中间件,让表现层调用服务层。工程之间的相互通信可以使用dubbo,,可以统一管理服务,系统之间的调用。
2 如何实现远程通信。
3   1、Webservice,效率不高,基于soap协议,项目中不推荐使用。
4   2、使用restful形式的服务,http+json,很多项目中应用。如果服务太多,服务之间的调用关系混乱,需要治疗服务。
5   3、dubbo,使用rpc协议进行远程调用,直接使用socket通信,传输效率高,并且可以统计出系统之间的调用关系,调用次数。缺点,由于是java开发,只能是两个java项目进行调度。

2、dubbo架构。术语来自官网。可以直接查看官网。

节点角色说明
节点 角色说明
Provider 暴露服务的服务提供方
Consumer 调用远程服务的服务消费方
Registry 服务注册与发现的注册中心
Monitor 统计服务的调用次数和调用时间的监控中心
Container 服务运行容器
调用关系说明
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo 架构具有以下几个特点,分别是连通性、健壮性、伸缩性、以及向未来架构的升级性。

3、注册中心(推荐zookeeper,也可以使用redis的呢)
  注册中心负责服务地址得注册与查找,相当于目录服务,服务提供者和消费者只在启动得时候与注册中心交互,注册中心不转发请求,压力较小,使用dubbo2.3.3以上版本,建议使用zookeeper注册中心。zookeeper是一个树形的目录服务,支持变更推送,适合作为dubbo服务的注册中心,工业强度高,可以用于生产环境,推荐使用。

4、安装zookeeper,必须首先安装jdk,这里安装jdk1.7版本。首先将安装包上传到机器上面哦。

[[email protected] jdk1.7.0_55]# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/soft

[[email protected] ~]# vim /etc/profile

1 export JAVA_HOME=/home/hadoop/soft/jdk1.7.0_55
2 export PATH=$PATH:$JAVA_HOME/bin


[[email protected] ~]# source /etc/profile

[[email protected] ~]# java

[[email protected] ~]# javac

[[email protected] ~]# java -version

5、开始安装zookeeper,首先将安装包上传到机器上面哦。

解压缩操作哦。

[[email protected] package]# tar -zxvf zookeeper-3.4.6.tar.gz -C /home/hadoop/soft/

然后配置一下zookeeper,就可以启动zookeeper了。

首先创建一个data文件夹。

配置完成了,就可以启动zookeeper。进行验证是否可以正常启动。

1 [[email protected] bin]# ./zkServer.sh start
2 JMX enabled by default
3 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
4 Starting zookeeper ... STARTED
5 [[email protected] bin]# ./zkServer.sh status
6 JMX enabled by default
7 Using config: /home/hadoop/soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
8 Mode: standalone
9 [[email protected] bin]#

[[email protected] bin]# ./zkServer.sh start    启动
[[email protected] bin]# ./zkServer.sh status    查看启动状态
[[email protected] bin]# ./zkServer.sh stop    关闭

6、zookeeper安装成功以后,就可以操作,服务如何发布,客户端如何引用服务。

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何api侵入,只需要用spring加载dubbo的配置即可,dubbo基于spring的schema扩展进行加载。
远程服务。在本地服务的基础上,只需要简单的配置,即可以完成远程话。
将传统写的xml配置文件中的bean注入以及bean的依赖注入的配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml配置文件中。并在提供方增加暴漏服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>。官网截图:

7、发布dubbo服务。定义一个接口。

 1 package com.taotao.service;
 2
 3 import com.taotao.pojo.TbItem;
 4
 5 /**
 6  *
 7  * @ClassName: ItemService.java
 8  * @author: biehl
 9  * @since: 2019年8月2日 下午3:32:36
10  * @Copyright: ©2019 biehl 版权所有
11  * @version: 0.0.1
12  * @Description:商品接口类
13  *
14  */
15 public interface ItemService {
16
17     /**
18      * 根据itemId查询出商品信息
19      *
20      * @param itemId
21      * @return
22      */
23     public TbItem getItemById(long itemId);
24
25 }

定义实现接口的实现类。

 1 package com.taotao.service.impl;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 import org.springframework.util.StringUtils;
 6
 7 import com.taotao.mapper.TbItemMapper;
 8 import com.taotao.pojo.TbItem;
 9 import com.taotao.service.ItemService;
10
11 /**
12  *
13  * @ClassName: ItemServiceImpl.java
14  * @author: biehl
15  * @since: 2019年8月2日 下午3:51:24
16  * @Copyright: ©2019 biehl 版权所有
17  * @version: 0.0.1
18  * @Description: 商品实现类
19  */
20 @Service
21 public class ItemServiceImpl implements ItemService {
22
23     @Autowired
24     private TbItemMapper tbItemMapper;
25
26     @Override
27     public TbItem getItemById(long itemId) {
28         TbItem tbItem = new TbItem();
29         if (!StringUtils.isEmpty(itemId)) {
30             tbItem = tbItemMapper.selectByPrimaryKey(itemId);
31         }
32         // 返回信息以后就可以发布服务
33         return tbItem;
34     }
35
36 }

配置提供dubbo的服务。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:aop="http://www.springframework.org/schema/aop"
 6     xmlns:tx="http://www.springframework.org/schema/tx"
 7     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 8     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans
10     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
11     http://www.springframework.org/schema/context
12     http://www.springframework.org/schema/context/spring-context-4.2.xsd
13     http://www.springframework.org/schema/aop
14     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
15     http://www.springframework.org/schema/tx
16     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
17     http://code.alibabatech.com/schema/dubbo
18     http://code.alibabatech.com/schema/dubbo/dubbo.xsd
19     http://www.springframework.org/schema/util
20     http://www.springframework.org/schema/util/spring-util-4.2.xsd">
21
22     <!-- 1、配置包扫描器,扫描所有带@Service注解的类,將創建的對象放到Spring容器中 -->
23     <!-- 也可以将子包扫描进去 -->
24     <!-- 将扫描com.taotao.service、com.taotao.service.impl -->
25     <context:component-scan
26         base-package="com.taotao.service"></context:component-scan>
27
28     <!-- 配置spring的事务,单独提取出来 -->
29
30     <!-- 发布dubbo服务 -->
31     <!-- 提供方应用信息,用于计算依赖关系 -->
32     <dubbo:application name="taotao-manager" />
33     <!-- 注册中心的地址 -->
34     <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181" />
35     <!-- 用dubbo协议在20880端口暴露服务 -->
36     <dubbo:protocol name="dubbo" port="20880" />
37     <!-- 声明需要暴露的服务接口 -->
38     <!-- ref="itemServiceImpl"就是扫描service的时候,注入到容器的bean -->
39     <dubbo:service interface="com.taotao.service.ItemService" ref="itemServiceImpl" timeout="300000" />
40     <!-- <dubbo:service interface="com.taotao.service.ItemCatService" ref="itemCatServiceImpl" timeout="300000" /> -->
41
42
43
44
45
46
47 </beans>    

如图所示:

8、在表现层引用dubbo的服务。提供方和引用方都需要引入dubbo的jar包哦。

 1 <!-- dubbo相关 -->
 2 <dependency>
 3     <groupId>com.alibaba</groupId>
 4     <artifactId>dubbo</artifactId>
 5     <!-- 排除spring的2.5.6版本,netty3.2.5版本,避免冲突 -->
 6     <exclusions>
 7         <exclusion>
 8             <groupId>org.springframework</groupId>
 9             <artifactId>spring</artifactId>
10         </exclusion>
11         <exclusion>
12             <groupId>org.jboss.netty</groupId>
13             <artifactId>netty</artifactId>
14         </exclusion>
15     </exclusions>
16 </dependency>
17 <dependency>
18     <groupId>org.apache.zookeeper</groupId>
19     <artifactId>zookeeper</artifactId>
20 </dependency>
21 <dependency>
22     <groupId>com.github.sgroschupf</groupId>
23     <artifactId>zkclient</artifactId>
24 </dependency>

配置一下引用方的配置。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xmlns:p="http://www.springframework.org/schema/p"
 5     xmlns:context="http://www.springframework.org/schema/context"
 6     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 7     xmlns:mvc="http://www.springframework.org/schema/mvc"
 8     xsi:schemaLocation="http://www.springframework.org/schema/beans
 9         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
10         http://www.springframework.org/schema/mvc
11         http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
12         http://code.alibabatech.com/schema/dubbo
13         http://code.alibabatech.com/schema/dubbo/dubbo.xsd
14         http://www.springframework.org/schema/context
15         http://www.springframework.org/schema/context/spring-context-4.2.xsd">
16
17     <!-- 1、加载属性文件 -->
18     <!-- <context:property-placeholder location="classpath:resource/resource.properties"/> -->
19
20     <!-- 2、配置注解驱动 -->
21     <mvc:annotation-driven />
22
23     <!-- 3、视图解析器 -->
24     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
25         <property name="prefix" value="/WEB-INF/jsp/" />
26         <property name="suffix" value=".jsp" />
27     </bean>
28
29     <!-- 4、配置包扫描器,扫描@Controller注解的类 -->
30     <context:component-scan base-package="com.taotao.controller"/>
31
32     <!-- 5、配置资源映射 -->
33     <mvc:resources location="/css/" mapping="/css/**"/>
34     <mvc:resources location="/js/" mapping="/js/**"/>
35
36     <!-- 6、多媒体解析器 -->
37     <!-- 配置文件上传解析器 -->
38     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
39         <!-- 设定默认编码 -->
40         <property name="defaultEncoding" value="UTF-8"></property>
41         <!-- 设定文件上传的最大值5MB,5*1024*1024 -->
42         <property name="maxUploadSize" value="5242880"></property>
43     </bean>
44
45
46     <!-- 引用服务,也要在spring容器中,直接在这里引用即可 -->
47     <!-- 引用dubbo服务 -->
48     <!-- 名称不一样的哦 -->
49     <dubbo:application name="taotao-manager-web"/>
50     <dubbo:registry protocol="zookeeper" address="192.168.110.140:2181"/>
51     <dubbo:reference interface="com.taotao.service.ItemService" id="itemService" />
52     <!-- <dubbo:reference interface="com.taotao.service.ItemCatService" id="itemCatService" />
53     <dubbo:reference interface="com.taotao.content.service.ContentCategoryService" id="contentCategoryService" />
54     <dubbo:reference interface="com.taotao.content.service.ContentService" id="contentService" />
55     <dubbo:reference interface="com.taotao.search.service.SearchItemService" id="searchItemService" /> -->
56
57
58
59
60 </beans>      
 1 package com.taotao.controller;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.PathVariable;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.ResponseBody;
 8
 9 import com.taotao.pojo.TbItem;
10 import com.taotao.service.ItemService;
11
12 /**
13  *
14  * @ClassName: ItemController.java
15  * @author: biehl
16  * @since: 2019年8月2日 下午5:10:31
17  * @Copyright: ©2019 biehl 版权所有
18  * @version: 0.0.1
19  * @Description:商品信息的控制层逻辑
20  */
21 @Controller
22 public class ItemController {
23
24     // itemService就是dubbo配置的id="itemService"
25     @Autowired
26     private ItemService itemService;
27
28     @RequestMapping(value = "/item/{itemId}")
29     @ResponseBody
30     public TbItem getItemById(@PathVariable(value = "itemId") Long itemId) {
31         TbItem tbItem = new TbItem();
32         tbItem = itemService.getItemById(itemId);
33         return tbItem;
34     }
35
36 }

9、dubbo服务调用测试。记得关闭dubbo服务器的防火墙,不然急死你。

待续......

原文地址:https://www.cnblogs.com/biehongli/p/11283958.html

时间: 2024-08-30 12:33:33

dubbo入门学习的相关文章

2018.11.9 Dubbo入门学习

1.什么是Dubbo dubbo.io 代表是开源的 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点 ?单一应用架构 ?当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本. ?此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键. ?垂直应用架构 ?当访问量逐渐增大,单一应用增

dubbo入门学习(三)-----dubbo整合springboot

springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo 一.创建boot-user-service-provider 本篇博文基于上篇中的dubbo项目,整体工程如下: 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"

dubbo入门学习(五)-----dubbo的高可用

zookeeper宕机与dubbo直连 现象 zookeeper注册中心宕机,还可以消费dubbo暴露的服务. 原因 健壮性 l 监控中心宕掉不影响使用,只是丢失部分采样数据 l 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务 l 注册中心对等集群,任意一台宕掉后,将自动切换到另一台 l 注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯 l 服务提供者无状态,任意一台宕掉后,不影响使用 l 服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提

dubbo入门示例

本文主要介绍阿里dubbo的基本使用,关于dubbo的相关基础概念请自行参考dubbo官网:http://www.dubbo.io dubbo是一个服务治理的框架,在如今大规模的分布式应用和SOA架构中,服务治理的问题显的尤为的重要. 以我个人使用dubbo的场景来总结,dubbo主要解决如下问题: 1.项目服务化后,项目之间的高性能通讯问题.(项目被拆分成多个服务模块后必然会涉及模块之间的通讯) 2.服务的URL管理,当项目拆分为N个服务并且不断增加时,如何有效的管理的服务URL 3.服务发现

基于MAVEN使用IDEA创建dubbo入门项目图文教程

花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File->New->Project 2, 3.等IDEA加载完成进行下一步 File -> New-> Moudle 4, 5,选择本地maven仓库 6,改名字 三: 创建dubbo-common 1,New -> File -> Moudle 2, 3, 4, 四: 创建dub

Retrofit 入门学习

Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos") Call<List<Repo>> listRepos(@Path("user") String user); } 这些注解都有一个参数 value,用来配置其路径,比如示例中的 users/{user}/repos, 我们还注意到在构造 Retrofit

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

[Todo] Nodejs学习及Spider实验(包括php入门学习、React入门学习)

/Users/baidu/Documents/Data/Interview/Web-Server开发 深入浅出Node.js-f46c http://blog.csdn.net/u012273376/article/details/52736906 利用nodejs做爬虫 http://www.runoob.com/nodejs/nodejs-callback.html nodejs学习之路 http://www.runoob.com/php/php-tutorial.html php学习之路

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对