主要参考dubbo官网demo

此处采用zookeeper注册中心进行服务协调管理

真个项目结构如下所示:

dcommon : 主要用于定义服务接口, 为dconsumer,dprovider所依赖

dparent: maven父工程

dconsumer: 服务消费者

dprovider: 服务提供者

首先需要在dconsumer和dprovider工程pom文件中加入相关dubbo及zookeeper客户端依赖:

          <dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
</dependency>
<!-- 此处zk客户端使用curator(从 2.3.0 版本开始支持可选 curator 实现) 客户端, 也可选择使用zkclient 客户端(从 2.2.0 版本开始缺省为 zkclient 实现) -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>

dcommon服务接口定义如下,DemoService.java:

package com.yinz.service;

public interface DemoService {

    String sayHello(String word);
}

dprovider服务实现如下,DemoServiceImpl.java:

package com.yinz.service.impl;

import com.yinz.service.DemoService;

public class DemoServiceImpl implements DemoService{

	@Override
public String sayHello(String word) {
return "hello : " + word;
} }

xml配置如下,application.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="demo-provider"/> <!-- 延迟暴露服务,spring容器初始化成功后再暴露服务,防止当服务器实现类中有 applicationContext.getBean() 的调用时出错,
强烈建议全部采用 IoC 注入的方式使用 Spring的Bean。-->
<dubbo:provider delay="-1"/> <!-- register="false" 禁用注册
subscribe="false" 禁用订阅 -->
<dubbo:registry address="zookeeper://47.98.11.199:2181"/> <!-- 配置dubbo协议线程模型 -->
<dubbo:protocol name="dubbo" port="20880" accesslog="true"
dispatcher="message" threadpool="fixed" threads="100"/> <!--cluster="failover" 为默认配置,此处可省略 -->
<dubbo:service interface="com.yinz.service.DemoService" ref="demoService"
retries="2" cluster="failover" loadbalance="roundrobin"/>
<bean id="demoService" class="com.yinz.service.impl.DemoServiceImpl"/> </beans>

加载spring配置代码如下:

package com.yinz.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Provider {

	 public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] {"classpath:application.xml"});
context.start();
// press any key to exit
System.in.read();
}
}

dconsumer,服务消费端配置引用远程服务,application.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="demo-consumer"/>
<dubbo:registry address="zookeeper://47.98.11.199:2181"/>
<dubbo:protocol name="dubbo" port="20880"/>
<dubbo:reference interface="com.yinz.service.DemoService" id="demoService" async="true"/>
</beans>

加载spring配置并调用远程服务

package com.yinz.consumer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yinz.service.CallbackListener;
import com.yinz.service.CallbackService;
import com.yinz.service.DemoService; public class Consumer { public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[]{"classpath:application.xml"});
context.start();
// obtain proxy object for remote invocation
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello("world");
System.out.println(hello);
System.in.read();
}
}

此外dubbo支持容错、负载均衡等高级特性,可参考dubbo官方文档介绍

另外附上dubbo管理控制台官网安装教程

dubbo入门使用的更多相关文章

  1. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  2. Dubbo入门—搭建一个最简单的Demo框架

    一.Dubbo背景和简介 1.电商系统的演进 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. a.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一 ...

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

    花了很长时间没有找到一个很详细的图文教程来学习dubbo入门框架,故记录下来. 一: 项目工程目录 简单介绍项目目录结构: 二: 创建父工程 具体操作步骤: 1,打开IDEA,按下面步骤来 File- ...

  4. dubbo入门学习笔记之入门demo(基于普通maven项目)

    注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...

  5. Dubbo入门---搭建一个最简单的Demo框架(转)

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本.  ...

  6. dubbo入门之微服务客户端服务端配置

    正常一个服务不会只做客户端或者只做服务端,一般的微服务都是服务与服务相互调用,那么,应该怎么配置呢?接着之前的dubbo入门之helloWorld,我们再改改配置,即可实现正常的微服务架构.与之前相比 ...

  7. Dubbo入门介绍---搭建一个最简单的Demo框架

    Dubbo入门---搭建一个最简单的Demo框架 置顶 2017年04月17日 19:10:44 是Guava不是瓜娃 阅读数:320947 标签: dubbozookeeper 更多 个人分类: D ...

  8. 企业级应用,如何实现服务化三(dubbo入门案例)

    今天是六一儿童节,从千里之外的广州,回到了贵州老家,真好!好山好水好心情,好了接着写点东西.这是企业级应用,如何实现服务化系列的第三篇.在上一篇:企业级应用,如何实现服务化二(dubbo架构)中,认识 ...

  9. 电商系统的演变可以看出架构演变 Dubbo入门 远程过程调用 需要解决的问题

    Dubbo入门---搭建一个最简单的Demo框架 - CSDN博客 https://blog.csdn.net/noaman_wgs/article/details/70214612 Dubbo背景和 ...

  10. dubbo学习实践(2)之Dubbo入门Demo

    开篇之前,先来了解下dubbo服务治理与技术架构,直接看图 dubbo技术架构图: 1. 新建dubbo项目,目录结构如下 代码说明: 1.代码分为Provider(服务提供方)与consumer(服 ...

随机推荐

  1. Android面试题(1)

    1. 下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在 ...

  2. @NotEmpty、@NotBlank、@NotNull区别

    @NotEmpty 用在集合类上面 @NotBlank 用在String上面 @NotNull    用在基本类型上

  3. TCP的状态(SYN,FIN等)

    TCP的标志位有SYN,FIN,RST,ACK,PSH,URG SYN:建立连接. FIN:关闭连接. RST:连接重置. ACK:响应. PSH:有数据传输. URG:urgent紧急. ACK可以 ...

  4. TestNG 七 annotation

    TestNG中用到的annotation的快速预览及其属性. @BeforeSuite:   被注释的方法将在所有测试运行前运行 @AfterSuite:  被注释的方法将在所有测试运行后运行 @Be ...

  5. Node.js aitaotu图片批量下载Node.js爬虫1.00版

    即使是https网页,解析的方式也不是一致的,需要多试试. 代码: //====================================================== // aitaot ...

  6. Android常用传感器用法一览(3)

    Android 开发包标准有8个传感器: Sensor.TYPE_ACCELEROMETER o 加速度计 (X, Y, Z) m/s2 Sensor.TYPE_GYROSCOPE o 陀螺仪 (X, ...

  7. HTTP常用端口号与对应的服务说明

    常用端口号与对应的服务以及端口关闭 端口简介:本文介绍端口的概念,分类,以及如何关闭/开启一个端口 21端口:21端口主要用于FTP(File Transfer Protocol,文件传输协议)服务. ...

  8. c# 句柄数不断攀升的解决方案

    句柄只是用来标识应用程序中的不同对象和同类中的不同的实例的一个数字,通常情况下,句柄值对普通用户毫无用处,但是句柄数量却可以间接反映出一个程序里产生的对象实例的多少.句柄数越多,代表程序里new 出来 ...

  9. jackson 转换 yyyy-MM-dd格式 少了一个小时问题解决(仅限中国)

    如果你在你的实体类上面指定了@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8") 然后发现换成json后 小 ...

  10. ACE调试中的一个小问题——ace_main_i无法链接

    初学ace没多久,今天遇到了一个小问题. 具体是:我在写完代码之后,编译老是出现一个错误. 提示: ACE_TEST1.obj : error LNK2019: 无法解析的外部符号 "int ...