spring + dubbo 学习
新启动的项目中可能会使用到dubbo,因为之前并没有接触过,所以先小试一下
示例运行环境准备:OS X 10.10.5 + java version "1.8.0_40"
zookeeper 和 dubbo-admin运行在虚拟机上,环境为Centos7.0 + java version "1.8.0_73"
项目使用gradlle管理

其中dubbo-demo未项目,里面新建了两个module,api为服务提供方,console为服务消费方。注意,需要在console module中添加api 的module依赖
api中代码如下:
DemoService
package com.dh.demo.service;
public interface DemoService {
public String hello(String name);
}
DemoServiceImpl
package com.dh.demo.service.impl;
import com.dh.demo.service.DemoService;
public class DemoServiceImpl implements DemoService {
public String hello(String name) {
return "hello " + name;
}
}
服务端spring配置文件dubbo-provider.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="dubbo-demo-api"/> <!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://vm:2181"/> <bean id="demoService" class="com.dh.demo.service.impl.DemoServiceImpl"/> <!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.dh.demo.service.DemoService" ref="demoService"/> </beans>
启动api的测试代码如下:
package com.dh.test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
public class Provider {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:/xxx/dubbo-demo/api/src/resources/dubbo-provider.xml");
context.start();
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务提供者的配置到此结束。
下面是消费者的配置和代码
spring配置文件dubbo-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="dubbo-demo-console"></dubbo:application>
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://vm:2181"/> <!-- 要引用的服务 -->
<dubbo:reference interface="com.dh.demo.service.DemoService" id="demoService"></dubbo:reference>
</beans>
启动消费者测试的代码如下
Consumer:
package com.dh.test; import com.dh.demo.service.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext; import java.io.IOException; public class Consumer {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("file:/xxx/dubbo-demo/console/src/resources/dubbo-consumer.xml");
context.start();
DemoService testRegistryService = (DemoService)context.getBean("demoService"); // 获取远程服务代理
String hello = testRegistryService.hello("world");
System.out.println(hello);
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
先运行提供者测试代码,再运行消费者代码。可以看到下面输出

至此测试成功
如果运行了dubbo-admin的话可以进去后可以查看和管理服务
这是提供者:

消费者:

有些童鞋可能不知道怎么运行dubbo-demo
看dubbo的github主页就行
如果再jdk8的环境下运行可能在启动的时候会遇到如下问题
Bean property 'URIType' is not writable or has 。。。。。后面省略
解决方式参考:https://github.com/alibaba/dubbo/issues/50 中 stirp 的方式即可
注:dubbo-demo的build.gradle内容如下
group 'com.dh'
version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.5 repositories { maven { url "http://repo.maven.apache.org/maven2" }
}
dependencies {
compile(group: 'com.alibaba', name: 'dubbo', version: '2.5.3') {
exclude(module: 'spring')
}
compile group: 'org.apache.zookeeper', name: 'zookeeper', version: '3.4.6'
compile group: 'com.google.zxing', name: 'core', version: '3.1.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.3.1'
compile group: 'io.netty', name: 'netty', version: '4.0.0.Alpha8'
compile group: 'javax.servlet', name: 'servlet-api', version: '2.5'
compile group: 'org.springframework', name: 'spring-context-support', version: '4.1.3.RELEASE'
compile group: 'org.springframework', name: 'spring-web', version: '4.1.3.RELEASE'
compile group: 'org.springframework', name: 'spring-webmvc', version: '4.1.3.RELEASE'
compile group: 'com.alibaba', name: 'fastjson', version: '1.2.7'
compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3.5'
compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-xml', version: '2.6.3'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.6.3'
compile group: 'com.thoughtworks.xstream', name: 'xstream', version: '1.4.2'
compile group: 'org.jdom', name: 'jdom', version: '1.1.3'
compile group: 'com.github.sgroschupf', name: 'zkclient', version: '0.1'
}
spring + dubbo 学习的更多相关文章
- Dubbo学习小记
前言 周一入职的新公司,到了公司第一件事自然是要熟悉新公司使用的各种技术,搭建本地的环境. 熟悉新公司技术的过程中,首先就是Maven,这个前面已经写过文章了,然后就是Dubbo----公司的服务都是 ...
- Spring Dubbo 开发笔记(一)——概述
概述: Spring Dubbo 是我自己写的一个基于spring-boot和dubbo,目的是使用Spring boot的风格来使用dubbo.(即可以了解Spring boot的启动过程又可以学习 ...
- dubbo学习(zz)
dubbo学习 博客分类: 开源软件 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站 ...
- Dubbo学习(六) dubbo 架构图 以及调用过程
一.Dubbo结构图 duubo结构图 我们解释以下这个架构图:Consumer服务消费者,Provider服务提供者.Container服务容器.消费当然是invoke提供者了,invoke这条 ...
- Dubbo学习系列之九(Shiro+JWT权限管理)
村长让小王给村里各系统来一套SSO方案做整合,隔壁的陈家村流行使用Session+认证中心方法,但小王想尝试点新鲜的,于是想到了JWT方案,那JWT是啥呢?JavaWebToken简称JWT,就是一个 ...
- Dubbo学习系列之十五(Seata分布式事务方案TCC模式)
上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1 ...
- Dubbo学习系列之十六(ELK海量日志分析框架)
外卖公司如何匹配骑手和订单?淘宝如何进行商品推荐?或者读者兴趣匹配?还有海量数据存储搜索.实时日志分析.应用程序监控等场景,Elasticsearch或许可以提供一些思路,作为业界最具影响力的海量搜索 ...
- 15 个优秀开源的 Spring Boot 学习项目,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...
- Dubbo学习系列之十一(Dashboard+Nacos规则推送)
中国武术,门派林立,都是号称多少代的XXX传人,结果在面对现代武术时,经常被KO秒杀,为啥,光靠宣传和口号撑门面,终究是靠不住,必须得有真货 ,得经得住考验,所以不能只说Sentinel有多好,也得给 ...
随机推荐
- 极光推送报错time_to_live value should be a non-negative integertime_to_live value should be a non-negative integer
文件中修改
- phpstorm 比较修改过的代码 version control
- koa 项目实战(二)连接 mongodb 数据库
1.配置文件 根目录/config/keys.js module.exports = { mongoURI: 'mongodb://127.0.0.1:27017/mongodb' } 2.启动文件 ...
- Linux 命令速记本
# 比较1.txt和2.txt的差异 comm [---] .txt .txt # 求1.txt和2.txt的MD5用于区分两个文件是否相同 md5sum .txt .txt #tr 用于转换或删除文 ...
- JNI使用常见错误
1. java.lang.UnsatisfiedLinkError: Couldn't load hello: **findLibrary returned null** 解决方案: * 如果处理器平 ...
- 什么叫DMZ区?DMZ区有什么作用?应该怎样构建DMZ
您的公司有一堆电脑,但可以归为两大类:客户机.服务器.所谓客户机就是主动发起连接请求的机器,所谓服务器就是被动响应提供某些服务的机器.服务器又可以分仅供企业内网使用和为外网提供服务两种. 所以,如果把 ...
- 串的应用与kmp算法讲解--学习笔记
串的应用与kmp算法讲解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象.同时希望可以帮到正在学习这方面知识的同学,可以相互学习.新手上路请多关照,如果问题还请不吝赐教. 2. 串的逻辑 ...
- Tensorflow 多层全连接神经网络
本节涉及: 身份证问题 单层网络的模型 多层全连接神经网络 激活函数 tanh 身份证问题新模型的代码实现 模型的优化 一.身份证问题 身份证号码是18位的数字[此处暂不考虑字母的情况],身份证倒数第 ...
- python-Web-django-qq扫码登陆
1.建路由 2.写qq登录的a链接 3 在控制器的loginQq的方法:拼接url,跳转到这个url: 去:https://graph.qq.com/oauth2.0/authorize?respon ...
- java-循环变量定义问题
第15行,这样就会报错.