1 项目结构
![](https://i-blog.csdnimg.cn/blog_migrate/78ca03e70a97b68b53d716d1b514213a.png)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<!-- zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
<java.encoding>UTF-8</java.encoding>
<junit.version>3.8.1</junit.version>
<spring.version>4.3.10.RELEASE</spring.version>
<dubbo.versioin>2.5.5</dubbo.versioin>
<zookeeper.version>3.4.8</zookeeper.version>
<zkclient.version>0.1</zkclient.version>
</properties>
2 applicationcontext.xml
<!-- 采用注释的方式配置bean -->
<context:annotation-config />
<!-- 配置要扫描的包 -->
<context:component-scan base-package="com.chy.service" />
<!-- proxy-target-class默认"false",更改为"ture"使用CGLib动态代理 -->
<aop:aspectj-autoproxy proxy-target-class="true" />
<import resource="dubbo-provider.xml" />
3 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管理页面比较清晰是哪个应用暴露出来的 -->
<dubbo:application name="dubbo-service" owner="programmer" />
<!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry protocol="zookeeper"
address="zookeeper://127.0.0.1:2181" check="false" subscribe="false"
register="">
</dubbo:registry>
<!-- 用dubbo协议在20881端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20881" />
<!-- 用户服务接口 -->
<dubbo:service interface="com.chy.service.HelloService" ref="helloService" />
<!--
duboo不能解决不同开发语言调用接口的问题,
dubbox支持REST风格远程调用(http + json/xml)能解决不同开发语言调用接口
-->
</beans>
4 发布的接口
package com.chy.service;
/**
* Created by chy on 2017/12/8.
*/
public interface HelloService {
String sayHello(String str);
}
5 接口具体实现代码
package com.chy.service;
import org.springframework.stereotype.Service;
/**
* Created by chy on 2017/12/8.
*/
@Service("helloService")
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String str) {
return "jar-Hello " + str;
}
}
6 程序入口
package com.chy;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException
{
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext.xml");
System.out.println(context.getDisplayName() + ": here");
context.start();
System.out.println("dubbo服务已经启动...");
System.in.read();
}
}
7 启动发布服务
![](https://i-blog.csdnimg.cn/blog_migrate/49af8e0a91c1b53dff3c7876bda57dfd.png)