dubbox2.8.4例子教程二
简介
上篇博客写了个dubbox生产者,也用HttpClient代码测试了rest服务,下面记录dubbox消费者工程
一、工程结构

一、Simple.java
package bhz.entity; import java.io.Serializable;
import java.util.Map; public class Simple implements Serializable
{
private static final long serialVersionUID = -4914434736682797743L;
private String name;
private int age;
private Map<String,Integer> map;
public Simple(){ }
public Simple(String name,int age,Map<String,Integer> map){
this.name = name;
this.age = age;
this.map = map;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public Map<String, Integer> getMap() {
return map;
} public void setMap(Map<String, Integer> map) {
this.map = map;
} }
二、User.java
package bhz.entity; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; import org.codehaus.jackson.annotate.JsonProperty; @XmlRootElement
public class User //implements Serializable
{ @NotNull
private String id; @JsonProperty("name")
@XmlElement(name = "name")
@NotNull
@Size(min = 6, max = 50)
private String name; public User() {
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} }
三、SimpleService.java
package bhz.service;
import bhz.entity.Simple;
public interface SimpleService {
public String sayHello(String name);
public Simple getSimple();
}
四、UserService.java
package bhz.service; import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType; import bhz.entity.User;
@Path("/userService")
@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})
@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})
public interface UserService {
@GET
@Path("/testget")
public void testget();
@GET
@Path("/getUser")
public User getUser();
@GET
@Path("/get/{id : \\d+}")
public User getUser(@PathParam(value = "id") Integer id);
@GET
@Path("/get/{id : \\d+}/{name : [a-zA-Z][0-9]}")
public User getUser(@PathParam(value = "id") Integer id, @PathParam(value = "name") String name);
@POST
@Path("/testpost")
public void testpost();
@POST
@Path("/postUser")
public User postUser(User user);
@POST
@Path("/post/{id}")
public User postUser(@PathParam(value = "id") String id); }
五、FastJsonConvert.java(fastJson序列化和反序列化工具类)
package bhz.utils; import java.util.List; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature; public class FastJsonConvert { private static final SerializerFeature[] featuresWithNullValue = { SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullNumberAsZero, SerializerFeature.WriteNullStringAsEmpty }; /**
* JsonString 转换 Object
*
* @param <T>
* @param data
* @param clzss
* @return
*/
public static <T> T convertJSONToObject(String data, Class<T> clzss) {
try {
T t = JSON.parseObject(data, clzss);
return t;
} catch (Exception e) {
e.printStackTrace();
return null; }
}
/**
* JsonString 转换 List<Object>
*
* @param <T>
* @param data
* @param clzss
* @return
*/
public static <T> List<T> convertJSONToArray(String data, Class<T> clzss) {
try {
List<T> t = JSON.parseArray(data, clzss);
return t;
} catch (Exception e) {
e.printStackTrace();
return null; }
} /**
* Object to JsonString
*
* @param <T>
* @param data
* @param valueType
* @return
*/
public static String convertObjectToJSON(Object obj) {
try {
String text = JSON.toJSONString(obj);
return text;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* Object to JsonString
*
* @param <T>
* @param data
* @param valueType
* @return
*/
public static String convertObjectToJSONWithNullValue(Object obj) {
try {
String text = JSON.toJSONString(obj, featuresWithNullValue);
return text;
} catch (Exception e) {
e.printStackTrace();
return null;
}
} public static void main(String[] args) {
System.err.println(System.getProperties());
}
}
六、SerializationOptimizerImpl.java(序列化实现类)
package bhz.utils; import java.util.Collection;
import java.util.LinkedList;
import java.util.List; import bhz.entity.Simple;
import bhz.entity.User; import com.alibaba.dubbo.common.serialize.support.SerializationOptimizer; public class SerializationOptimizerImpl implements SerializationOptimizer { public Collection<Class> getSerializableClasses() {
List<Class> classes = new LinkedList<Class>();
//这里可以把所有需要进行序列化的类进行添加
classes.add(User.class);
classes.add(Simple.class);
return classes;
}
}
七、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"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- 引入properties配置文件 -->
<util:properties id="zcparams" location="classpath:params.properties"></util:properties> <dubbo:application name="consumer" owner="programmer" organization="dubbox"/> <dubbo:registry address="zookeeper://192.168.0.4:2181?backup=192.168.0.5:2181,192.168.0.6:2181"/> <!-- kryo实现序列化 -->
<dubbo:protocol name="dubbo" serialization="kryo" optimizer="bhz.utils.SerializationOptimizerImpl" /> <!-- 生成远程服务代理,可以像使用本地bean -->
<dubbo:reference interface="bhz.service.UserService" id="userService" check="false" />
<!-- 生成远程服务代理,可以像使用本地bean -->
<dubbo:reference interface="bhz.service.SimpleService" id="simpleService" /> </beans>
八、log4j.properties
log4j.rootLogger=INFO, console, file log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.file.File=D:/002_developer/workspace_001/zcmoni.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p [%c] - %m%n log4j.logger.org.springframework=WARN
九、Consumer.java(消费者测试类)
package bhz.test; import org.springframework.context.support.ClassPathXmlApplicationContext; import bhz.entity.Simple;
import bhz.service.SimpleService;
import bhz.service.UserService; public class Consumer { public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "dubbo-consumer.xml" });
context.start(); SimpleService ss = (SimpleService) context.getBean("simpleService");
String hello = ss.sayHello("tom");
System.out.println(hello);
Simple simple = ss.getSimple();
System.out.println(simple.getName());
System.out.println(simple.getAge());
System.out.println(simple.getMap().get("zhang1")); UserService us = (UserService) context.getBean("userService"); System.out.println(us.getUser().getName());
System.out.println(us.getUser().getId());
} }
到这里,dubbox消费端就做好了
10、dubbox-admin查看服务

可以看到有两个服务,一个是普通的dubbox服务(SimpleService)另一个是dubbbox的rest服务(UserService)
11、测试结果
hellotom
zhang3
21
2
张三
1001
dubbox2.8.4例子教程二的更多相关文章
- 无废话ExtJs 入门教程二十一[继承:Extend]
无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...
- Android高手进阶教程(二十八)之---Android ViewPager控件的使用(基于ViewPager的横向相册)!!!
分类: Android高手进阶 Android基础教程 2012-09-14 18:10 29759人阅读 评论(35) 收藏 举报 android相册layoutobjectclassloade ...
- mongodb入门教程二
title: mongodb入门教程二 date: 2016-04-07 10:33:02 tags: --- 上一篇文章说了mongodb最基本的东西,这边博文就在深入一点,说一下mongo的一些高 ...
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- SpringBoot进阶教程(二十九)整合Redis 发布订阅
SUBSCRIBE, UNSUBSCRIBE 和 PUBLISH 实现了 发布/订阅消息范例,发送者 (publishers) 不用编程就可以向特定的接受者发送消息 (subscribers). Ra ...
- PySide——Python图形化界面入门教程(二)
PySide——Python图形化界面入门教程(二) ——交互Widget和布局容器 ——Interactive Widgets and Layout Containers 翻译自:http://py ...
- electron教程(二): http服务器, ws服务器, 进程管理
我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(二): http服务器, ws服务器, 进程管理 electron教程(三): 使 ...
- redis学习教程二《四大数据类型》
redis学习教程二<四大数据类型> 四大数据类型包括:字符串 哈希 列表 集合一 : Redis字符串 Redis字符串命令用于管理Redis中的字符串 ...
随机推荐
- ORACLE—005:创建JOB(一)
JOB在实际应用中.使用非常多.一般用户定时运行某些函数,存储过程等. 以下看看怎样创建并启动JOB. 比如,使用job定时运行某个存储过程. 存储过程名:Pro_Test_JOB 运行间隔:2小时, ...
- PHP-手册阅读笔记
1.第一次遇到$_ENV为空数组的情况, 原来是PHP.INI中variables_order为'GPCS'(表示系统在定义PHP预定义变量时的顺序是GET,POST,COOKIES,SERVER,只 ...
- HDUOJ-----2852 KiKi's K-Number(树状数组+二分)
KiKi's K-Number Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- windows添加开机启动项
http://www.cnblogs.com/jokey/archive/2010/06/17/1759370.html添加开机启动项(通过注册表) 例子:增加QQ开机启动项 第一步:找到注册表的启动 ...
- LINUX使用DVD光盘或者ISO作为本地YUM源
先把光盘或 ISO 文件挂载到文件系统: # mkdir /media/iso 挂载光盘: # mount /dev/cdrom /media/iso 或挂载 ISO 文件: mount -o loo ...
- Form_Form Builder的基本语法(概念)
2014-05-21 Created By BaoXinjian
- STL之内存处理
说明:本文仅供学习交流,转载请标明出处,欢迎转载! STL中与内存配置相关的类是allocator类,头文件为:#include<alllocator>这是一个模板类,用于内存的分配.对象 ...
- iOS网络框架 AFNetworking
-(void)GetActivationUser{ NSString *url = @"http://app.xxxx.com/music/search?key=%E9%AC%BC%E5%9 ...
- Objective-C学习笔记(四)——OC实现最简单的数学运算
本篇帖子会实现使用OC的最简单的加减乘除运算.学习的知识点包含变量定义.运算方法,格式化输出等概念.主要学习主要的语法,事实上和C语言的语法还是比較相似的. 具体代码仅仅要写在main方法中即可了.具 ...
- Math.Celing、Math.Floor、Math.DivRem与Math.BigMul
返回大于或等于指定数字的最小整数.例如: double a=Math.Celing(0.00); //0 double a=Math.Celing(0.40); //1 double a=Math ...