Dubbox入门示例(注册服务器使用zookeeper)【转】

准备工作:

1,安装好 zookeeper (可参考前一篇文章)

2,安装好maven

3,安装git(也可以不安装,直接下载源码)

下面进入正式步骤

1,在 git 命令行下,下载项目源码

git clone https://github.com/dangdangdotcom/dubbox

2,对下载下来的源码进行编译

mvn install -Dmaven.test.skip=true

3,下载下来的有一个文件夹  dubbo-demo ,这里包含了官方demo,可以参考。

官方demo里包含了3个文件夹 dubbo-demo-api(服务接口及传输对象)、dubbo-demo-provider(服务生产者)、dubbo-demo-consumer(服务消费方)

4,下载下来的有一个文件夹 dubbo-admin,这个是dubbo的后台管理,其配置文件在webapp\WEB-INF\底下,名为 dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

将 dubbo-admin 打成war包,放在tomcat底下,即可以在浏览器进入dubo的后台,进行管理。

注意:zookeeper启动之后会占用8080端口。

Dubbox入门示例(注册服务器使用zookeeper)【转】_第1张图片

5,dubbo-monitor项目用于性能监控

6,模拟官方demo,编写小demo

6.1,新建api项目

Dubbox入门示例(注册服务器使用zookeeper)【转】_第2张图片

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

org.viking

dubbo-hello-api

0.0.1-SNAPSHOT

dubbo-hello-api

com.alibaba

dubbo

2.8.4

javax.validation

validation-api

1.0.0.GA

javax.annotation

javax.annotation-api

1.2

org.codehaus.jackson

jackson-mapper-asl

1.9.12

dubbo-hello-api

SerializationOptimizerImpl.java

/**

* Copyright 1999-2014 dangdang.com.

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

*      http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package viking.dubbo.demo.api;

import com.alibaba.dubbo.common.serialize.support.SerializationOptimizer;

import java.util.Collection;

import java.util.LinkedList;

import java.util.List;

/**

* This class must be accessible from both the provider and consumer

*

* @author lishen

*/

public class SerializationOptimizerImpl implements SerializationOptimizer {

public Collection getSerializableClasses() {

List classes = new LinkedList();

classes.add(User.class);

return classes;

}

}

User.java

package viking.dubbo.demo.api;

import org.codehaus.jackson.annotate.JsonProperty;

import javax.validation.constraints.Min;

import javax.validation.constraints.NotNull;

import javax.validation.constraints.Size;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

import java.io.Serializable;

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

public class User implements Serializable {

@NotNull

@Min(1L)

private Long id;

@JsonProperty("username")

@XmlElement(name = "username")

@NotNull

@Size(min = 6, max = 50)

private String name;

public User() {

}

public User(Long id, String name) {

this.id = id;

this.name = name;

}

public Long getId() {

return id;

}

public void setId(Long id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "User (" +

"id=" + id +

", name='" + name + '\'' +

')';

}

}

UserRestService.java

package viking.dubbo.demo.api;

import javax.validation.constraints.Min;

public interface UserRestService {

User getUser(@Min(value = 1L, message = "User ID must be greater than 1") Long id);

}

UserService.java

package viking.dubbo.demo.api;

public interface UserService {

User getUser(Long id);

}

6.2,新建provider

Dubbox入门示例(注册服务器使用zookeeper)【转】_第3张图片

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

org.viking

dubbo-hello-provider

0.0.1-SNAPSHOT

dubbo-hello-provider


org.viking

dubbo-hello-api

0.0.1-SNAPSHOT

com.alibaba

dubbo

2.8.4

org.javassist

javassist

3.15.0-GA

org.apache.mina

mina-core

1.1.7

org.glassfish.grizzly

grizzly-core

2.1.4

org.apache.httpcomponents

httpclient

4.2.1

com.alibaba

fastjson

1.1.39

com.thoughtworks.xstream

xstream

1.4.1

org.apache.bsf

bsf-api

3.1

org.apache.zookeeper

zookeeper

3.4.6

com.github.sgroschupf

zkclient

0.1

org.apache.curator

curator-framework

2.5.0

com.googlecode.xmemcached

xmemcached

1.3.6

org.apache.cxf

cxf-rt-frontend-simple

2.6.1

org.apache.cxf

cxf-rt-transports-http

2.6.1

org.apache.thrift

libthrift

0.8.0

com.caucho

hessian

4.0.7

javax.servlet

javax.servlet-api

3.1.0

org.mortbay.jetty

jetty

6.1.26

org.mortbay.jetty

servlet-api

log4j

log4j

1.2.16

org.slf4j

slf4j-api

1.6.2

redis.clients

jedis

2.1.0

javax.validation

validation-api

1.0.0.GA

org.hibernate

hibernate-validator

4.2.0.Final

javax.cache

cache-api

0.4

org.jboss.resteasy

resteasy-jaxrs

3.0.7.Final

org.jboss.resteasy

resteasy-client

3.0.7.Final

org.jboss.resteasy

resteasy-netty

3.0.7.Final

org.jboss.resteasy

resteasy-jdk-http

3.0.7.Final

org.jboss.resteasy

resteasy-jackson-provider

3.0.7.Final

org.jboss.resteasy

resteasy-jaxb-provider

3.0.7.Final

org.apache.tomcat.embed

tomcat-embed-core

8.0.11

org.apache.tomcat.embed

tomcat-embed-logging-juli

8.0.11

com.esotericsoftware.kryo

kryo

2.24.0

de.javakaffee

kryo-serializers

0.26

de.ruedigermoeller

fst

1.55

dubbo-hello-provider

DemoProvider.java

package viking.dubbo.demo.provider;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DemoProvider {

public static void main(String[] args) throws IOException {

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:META-INF/spring/*.xml");

context.start();

System.out.println("服务已经启动...");

System.in.read();

}

}

UserRestServiceImpl.java

package viking.dubbo.demo.provider;

import com.alibaba.dubbo.rpc.RpcContext;

import com.alibaba.dubbo.rpc.protocol.rest.support.ContentType;

import viking.dubbo.demo.api.User;

import viking.dubbo.demo.api.UserRestService;

import viking.dubbo.demo.api.UserService;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.ws.rs.*;

import javax.ws.rs.core.MediaType;

@Path("users")

@Consumes({MediaType.APPLICATION_JSON, MediaType.TEXT_XML})

@Produces({ContentType.APPLICATION_JSON_UTF_8, ContentType.TEXT_XML_UTF_8})

public class UserRestServiceImpl implements UserRestService {

private UserService userService;

public void setUserService(UserService userService) {

this.userService = userService;

}

@GET

@Path("{id : \\d+}")

public User getUser(@PathParam("id") Long id) {

if (RpcContext.getContext().getRequest(HttpServletRequest.class) != null) {

System.out.println("Client IP address from RpcContext: " + RpcContext.getContext().getRequest(HttpServletRequest.class).getRemoteAddr());

}

if (RpcContext.getContext().getResponse(HttpServletResponse.class) != null) {

System.out.println("Response object from RpcContext: " + RpcContext.getContext().getResponse(HttpServletResponse.class));

}

return userService.getUser(id);

}

}

UserServiceImpl.java

package viking.dubbo.demo.provider;

import viking.dubbo.demo.api.User;

import viking.dubbo.demo.api.UserService;

public class UserServiceImpl implements UserService {

public User getUser(Long id) {

return new User(id, "username" + id);

}

}

dubbo-demo-provider.xml


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-2.5.xsd

http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">


extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/>

6.3,新建 consumer

pom.xml

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

org.viking

dubbo-hello-consumer

0.0.1-SNAPSHOT

dubbo-hello-consumer


org.viking

dubbo-hello-api

0.0.1-SNAPSHOT

com.alibaba

dubbo

2.8.4

org.javassist

javassist

3.15.0-GA

org.apache.mina

mina-core

1.1.7

org.glassfish.grizzly

grizzly-core

2.1.4

org.apache.httpcomponents

httpclient

4.2.1

com.alibaba

fastjson

1.1.39

com.thoughtworks.xstream

xstream

1.4.1

org.apache.bsf

bsf-api

3.1

org.apache.zookeeper

zookeeper

3.4.6

com.github.sgroschupf

zkclient

0.1

org.apache.curator

curator-framework

2.5.0

com.googlecode.xmemcached

xmemcached

1.3.6

org.apache.cxf

cxf-rt-frontend-simple

2.6.1

org.apache.cxf

cxf-rt-transports-http

2.6.1

org.apache.thrift

libthrift

0.8.0

com.caucho

hessian

4.0.7

javax.servlet

javax.servlet-api

3.1.0

org.mortbay.jetty

jetty

6.1.26

org.mortbay.jetty

servlet-api

log4j

log4j

1.2.16

org.slf4j

slf4j-api

1.6.2

redis.clients

jedis

2.1.0

javax.validation

validation-api

1.0.0.GA

org.hibernate

hibernate-validator

4.2.0.Final

javax.cache

cache-api

0.4

org.jboss.resteasy

resteasy-jaxrs

3.0.7.Final

org.jboss.resteasy

resteasy-client

3.0.7.Final

org.jboss.resteasy

resteasy-netty

3.0.7.Final

org.jboss.resteasy

resteasy-jdk-http

3.0.7.Final

org.jboss.resteasy

resteasy-jackson-provider

3.0.7.Final

org.jboss.resteasy

resteasy-jaxb-provider

3.0.7.Final

org.apache.tomcat.embed

tomcat-embed-core

8.0.11

org.apache.tomcat.embed

tomcat-embed-logging-juli

8.0.11

com.esotericsoftware.kryo

kryo

2.24.0

de.javakaffee

kryo-serializers

0.26

de.ruedigermoeller

fst

1.55

dubbo-hello-consumer

DemoConsumer.java

package viking.dubbo.demo.consumer;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import viking.dubbo.demo.api.UserService;

import javax.ws.rs.client.Client;

import javax.ws.rs.client.ClientBuilder;

import javax.ws.rs.client.WebTarget;

import javax.ws.rs.core.Response;

public class DemoConsumer {

public static void main(String[] args) {

final String port = "8888";

//测试Rest服务

getUser("http://localhost:" + port + "/services/users/1.json");

getUser("http://localhost:" + port + "/services/users/1.xml");

//测试常规服务

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:META-INF/spring/*.xml");

context.start();

UserService userService = context.getBean(UserService.class);

System.out.println(userService.getUser(1L));

}

private static void getUser(String url) {

System.out.println("Getting user via " + url);

Client client = ClientBuilder.newClient();

WebTarget target = client.target(url);

Response response = target.request().get();

try {

if (response.getStatus() != 200) {

throw new RuntimeException("Failed with HTTP error code : " + response.getStatus());

}

System.out.println("Successfully got result: " + response.readEntity(String.class));

} finally {

response.close();

client.close();

}

}

}

dubbo-hello-consumer.xml


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-2.5.xsd

http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

7,运行查看结果

首先运行 provider,然后运行 consumer,同时也可以在dubbo的后台管理查看结果

Getting user via http://localhost:8888/services/users/1.json

log4j:WARN No appenders could be found for logger (org.jboss.resteasy.plugins.providers.DocumentProvider).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Successfully got result: {"id":1,"username":"username1"}

Getting user via http://localhost:8888/services/users/1.xml

Successfully got result: 1username1

User (id=1, name='username1')

Dubbox入门示例(注册服务器使用zookeeper)【转】_第4张图片

1. 使用阿里巴巴Druid连接池(高效、功能强大、可扩展性好的数据库连接池、监控数据库访问性能、支持Common-Logging、Log4j和JdkLog,监控数据库访问)

2. 提供高并发JMS消息处理机制

3. 所有功能模块化、所有模块服务化、所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机

4. 提供Wink Rest、Webservice服务,故可作为独立服务平台部署

框架整合:

Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC、IOS、Android)

框架简介:

项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化、服务化、原子化的方案,将功能模块进行拆分,可以公用到所有的项目中。架构采用分布式部署架构,所有模块进行拆分,使项目做到绝对解耦,稳定压倒一切~~

持续集成:

1. 我的待办工作流服务(提供Webservice服务)

2. 我的待办工作流集成JMS消息服务(支持高并发,可支持成千上万系统集成)

3. 我的任务提供Rest服务,完成日常的工作管理,通过定时调度平台,动态生成我的任务、循环周期任务、定时邮催提醒完成任务等

4. 文件上传、多线程下载服务化、发送邮件、短信服务化、部门信息服务化、产品信息服务化、信息发布服务化、我的订阅服务化、我的任务服务化、公共链接、我的收藏服务化等

系统模块:

1.  用户管理:

用户信息管理(添加、删除、修改、用户授权、用户栏目管理、查询等)

用户组管理(添加、删除、修改、用户组栏目授权,栏目授权、查询、用户组人员添加查询等)

用户角色管理(添加、删除、修改、用户角色授权、用户角色栏目信息查询设置等)

2.  文章管理:

栏目管理:查询无限极栏目树、创建无限极栏目树分类(导航栏目、图片列表栏目、文章列表栏目、文章内容栏目等)、删除、修改栏目信息。

文章管理:创建、删除、修改文章,多维度文章查询,包括已发布、未发布、所有文章等。文章富文本编辑器、文章多文件上传、文章状态控制等。

3.  系统设置:

数据字典管理:支持中、英文信息,支持无限级别分类配置,动态控制是否可用等。

部门信息管理:支持中、英文无限级别部门信息增加,删除,修改操作,部门列表、树心查询等。

日志管理:系统日志列表查询、在线查看、在线下载等

路线管理:集成百度地图API,提供线路查询管理功能

Druid Monitor(监控):集成阿里巴巴连接池,提供在线连接池监控程序,包括:数据源、SQL监控、URL监控、Session监控、Spring监控等

网站信息管理:通过系统配置文件进行网站内容操作,包括邮件服务器配置、公司基本信息配置等。

4.集成REST服务,可以用作独立服务平台(提供大量实例及测试平台,包括:文件上传下载、邮件短信发送、部门、产品、公共连接、我的收藏、我的任务、信息发布等)

5.  集成Quartz调度,可以用作定时调度平台(动态配置调度类、调度时间,使程序自动执行某些业务)

6.  Lucene搜索引擎,可以将文件资料索引化,支持文件内容搜索、关键字搜索、高亮关键字等,使信息在毫秒内提取查询出来

7.  用户设置功能:包括修改用户信息,修改密码、发送消息,修改个人图片,查看角色、查看用户组,管理员修改角色、用户、用户组等。

8.  集成Webservice平台,包括jaxws服务、CXF框架,配置双加密的权限认证。使服务集成更加安全。

9.  Bootstrap html5提供了两套前台开环境,包括CMS和电子商务网站,使您的开发更加的简洁。

技术点:

1.  Springmvc + Mybatis集成、SpringSecurity权限控制、Spring AOP事务处理。

2.   Wink Rest服务、Webservice服务:jaxws、CXF等

3.  IO 流上传下载文件,多线程操作

4.  发送邮件,配置邮件服务器,发基于html、纯文本格式的邮件

5.  MD5加密 (登陆密码校验加密等),用户统一Session、Cookie管理,统一验证码校验等。

6.  数据库连接池统一配置

7.  Quartz定时调度任务集成(直接通过配置即可)

8.  Httpclient破解验证码,登陆联通充值平台

9.  汉字、英文拆分、可以用作文档关键字搜索等。

10.  Base64图片处理,支持PC,Android,IOS

11.  Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并用到了项目中)

12.  提供大量工具类,可以直接使用

13.  Maven项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。

Dubbox入门示例(注册服务器使用zookeeper)【转】_第5张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第6张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第7张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第8张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第9张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第10张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第11张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第12张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第13张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第14张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第15张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第16张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第17张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第18张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第19张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第20张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第21张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第22张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第23张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第24张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第25张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第26张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第27张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第28张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第29张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第30张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第31张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第32张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第33张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第34张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第35张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第36张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第37张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第38张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第39张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第40张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第41张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第42张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第43张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第44张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第45张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第46张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第47张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第48张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第49张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第50张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第51张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第52张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第53张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第54张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第55张图片
Dubbox入门示例(注册服务器使用zookeeper)【转】_第56张图片

Dubbox入门示例(注册服务器使用zookeeper)【转】_第57张图片

你可能感兴趣的:(Dubbox入门示例(注册服务器使用zookeeper)【转】)