虽然项目中用到了dubbo,还是想自己玩玩写个demo。百度一搜,关于dubbo的helloworld基本都是在windows上做的。现在在Linux上玩一下。

环境准备:

jdk版本:1.7

服务器:tomcat7

dubbo版本:2.5.4

注册中心zookeeper版本:zookeeper-3.4.5.tar

dubbo-admin版本:dubbo-admin-2.5.4.war

系统:CentOS 6.4

准备三台虚拟机 我用的centos6.4,具体安装配置可以看这里https://www.cnblogs.com/lihaoyang/p/8341760.html,做zookeeper集群,部署管控台

说明:

1,JDK版本选择:从17年开始dubbo又开始更新后的第一个版本是2.5.4,之前版本一直停留在2.5.3,所以现在线上跑的项目很多还是2.5.3版本的dubbo。现在很多新项目都用的jdk1.8,但是用dubbo2.5.4版本的管控台,在jdk1.8环境上跑启动tomcat会报错(一个URIType类里的getset方法导致的,原因是这个set方法写的不规范,虽然网上也有一些解决办法,但是还是换用JDK1.7吧!毕竟线上现在JDK1.7还是很多的),所以我这里还用JDK1.7;

2,dubbo版本:为了和dubbo版本保持一致,所以管控台也用2.5.4 。最新版本的dubbo源码项目结构已经跟以前不一样了(详看github),2.5.4版本的管控台dubbo-admin项目也不存在了,所以要从dubbo-admin的源码构建出war包也构建不了了(我上传到了百度网盘一份dubbo-admin-2.5.4.war:https://pan.baidu.com/s/1iUzL2YuDU0I2MBQU5jnG4w 提取码:b4t1)。

一:安装Zookeeper集群

http://www.cnblogs.com/lihaoyang/p/8358153.html

安装好zookeeper后, zkServer.sh start 启动每台zk,zkServer.sh status 查看每个节点状态,可以看到一个leader,两个follower

二:安装管控台

把 dubbo-admin-2.5.4.war 上传到其中的一台机器,copy到tomcat7的webapps下,启动tomcat解压war包,或者 unzip dubbo-admin-2.5.4.war -d dubbo-admin 命令解压,删除tomcat的webapps下的ROOT,并把解压后的管控台命名为ROOT这样访问的时候就不用输入项目名了。

进入 /lhy/software/apache-tomcat-7.0.70/webapps/ROOT/WEB-INF  修改dubbo管控台配置

vim dubbo.properties:用户名密码都改为了root,修改zk集群地址

保存并退出wq! 。

启动tomcat,关闭每台机器的防火墙,在windows机器上访问tomcat机器地址,输入配置的root/root用户

可以看到dubbo管控台安装没问题:

由于用的是dubbo-2.5.4版本,所以这一步特别注意JDK的版本一定要是JDK1.7 ,如果你是jdk1.8 启动管控台会报错。

三:写java程序

项目结构:比较接近实际项目结构了

lhy-parent父工程,定义jar包版本。

lhy-facede:定义dubbo接口,为了省事把 实体类放在了lhy-facade,这样生产者和消费者都能引用了。现公司的接口层叫xxx-api,实现叫xxx-service,而里边的接口和实现类的定义叫UserFacade、UserFacadeImpl。其实接口定义为XXXFacade比较科学,这样在消费者项目里,一看就知道是dubbo接口,而区别于本项目的service。

lhy-service:接口实现

lhy-consumer:消费者

 lhy-parent 父项目pom工程:

其中zookeeper注册中心依赖的jar包是zkClient,官方文档说了。从2.2.0版本zk注册中心默认使用zkclient,需依赖

<dependency>
       <groupId>com.github.sgroschupf</groupId>
  <artifactId>zkclient</artifactId>
  <version>0.1</version>
</dependency>

或者从2.3.0版本开始,支持zk注册中心支持curator实现,需依赖

<dependency>
  <groupId>com.netflix.curator</groupId>
  <artifactId>curator>framework</artifactId>
  <version>1.1.10</version>
</dependency>

本例子使用zkClient

pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.lhy</groupId>
  8. <artifactId>lhy-parent</artifactId>
  9. <version>1.0</version>
  10. <packaging>pom</packaging>
  11.  
  12. <modules>
  13. <module>../lhy-facade</module>
  14. <module>../lhy-service</module>
  15. <module>../lhy-consumer</module>
  16. </modules>
  17.  
  18. <!-- 集中定义依赖版本号 -->
  19. <properties>
  20. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  21. <maven.compiler.source>1.7</maven.compiler.source>
  22. <maven.compiler.target>1.7</maven.compiler.target>
  23.  
  24. <junit.version>4.12</junit.version>
  25. <spring.version>4.1.3.RELEASE</spring.version>
  26. <mysql.version>5.1.32</mysql.version>
  27. <slf4j.version>1.6.4</slf4j.version>
  28. <jackson.version>2.4.2</jackson.version>
  29. <druid.version>1.0.9</druid.version>
  30. <httpclient.version>4.3.5</httpclient.version>
  31. <jstl.version>1.2</jstl.version>
  32. <servlet-api.version>2.5</servlet-api.version>
  33. <jsp-api.version>2.0</jsp-api.version>
  34. <joda-time.version>2.5</joda-time.version>
  35. <commons-lang3.version>3.3.2</commons-lang3.version>
  36. <commons-io.version>1.3.2</commons-io.version>
  37. <commons-net.version>3.3</commons-net.version>
  38. <pagehelper.version>3.4.2-fix</pagehelper.version>
  39. <jsqlparser.version>0.9.1</jsqlparser.version>
  40. <commons-fileupload.version>1.3.1</commons-fileupload.version>
  41. <jedis.version>2.7.2</jedis.version>
  42. <solrj.version>4.10.3</solrj.version>
  43. <shiro.version>1.3.2</shiro.version>
  44. <commons-logging.version>1.2</commons-logging.version>
  45. <log4j.version>1.2.17</log4j.version>
  46. <slf4j-log4j12.version>1.7.5</slf4j-log4j12.version>
  47. <zkclient.version>0.1</zkclient.version>
  48. <dubbo.version>2.5.4</dubbo.version>
  49. <mybatis-plus.version>3.0.5</mybatis-plus.version>
  50. </properties>
  51.  
  52. <!-- 只定义依赖的版本,并不实际依赖 -->
  53. <dependencyManagement>
  54. <dependencies>
  55. <!-- MySql -->
  56. <dependency>
  57. <groupId>mysql</groupId>
  58. <artifactId>mysql-connector-java</artifactId>
  59. <version>${mysql.version}</version>
  60. </dependency>
  61. <!--mysql end-->
  62.  
  63. <!-- 连接池 -->
  64. <dependency>
  65. <groupId>com.alibaba</groupId>
  66. <artifactId>druid</artifactId>
  67. <version>${druid.version}</version>
  68. </dependency>
  69. <!--连接池end-->
  70.  
  71. <!-- Spring -->
  72. <dependency>
  73. <groupId>org.springframework</groupId>
  74. <artifactId>spring-context</artifactId>
  75. <version>${spring.version}</version>
  76. </dependency>
  77. <dependency>
  78. <groupId>org.springframework</groupId>
  79. <artifactId>spring-beans</artifactId>
  80. <version>${spring.version}</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>org.springframework</groupId>
  84. <artifactId>spring-webmvc</artifactId>
  85. <version>${spring.version}</version>
  86. </dependency>
  87. <dependency>
  88. <groupId>org.springframework</groupId>
  89. <artifactId>spring-jdbc</artifactId>
  90. <version>${spring.version}</version>
  91. </dependency>
  92. <dependency>
  93. <groupId>org.springframework</groupId>
  94. <artifactId>spring-aspects</artifactId>
  95. <version>${spring.version}</version>
  96. </dependency>
  97. <!--spring end-->
  98.  
  99. <!-- JSP相关 -->
  100. <dependency>
  101. <groupId>jstl</groupId>
  102. <artifactId>jstl</artifactId>
  103. <version>${jstl.version}</version>
  104. </dependency>
  105. <dependency>
  106. <groupId>javax.servlet</groupId>
  107. <artifactId>servlet-api</artifactId>
  108. <version>${servlet-api.version}</version>
  109. <scope>provided</scope>
  110. </dependency>
  111. <dependency>
  112. <groupId>javax.servlet</groupId>
  113. <artifactId>jsp-api</artifactId>
  114. <version>${jsp-api.version}</version>
  115. <scope>provided</scope>
  116. </dependency>
  117. <!--Jsp end-->
  118.  
  119. <!-- 文件上传组件 -->
  120. <dependency>
  121. <groupId>commons-fileupload</groupId>
  122. <artifactId>commons-fileupload</artifactId>
  123. <version>${commons-fileupload.version}</version>
  124. </dependency>
  125.  
  126. <!-- 工具类 -->
  127. <dependency>
  128. <groupId>org.apache.commons</groupId>
  129. <artifactId>commons-lang3</artifactId>
  130. <version>${commons-lang3.version}</version>
  131. </dependency>
  132.  
  133. <!-- Jackson Json处理工具包 -->
  134. <dependency>
  135. <groupId>com.fasterxml.jackson.core</groupId>
  136. <artifactId>jackson-databind</artifactId>
  137. <version>${jackson.version}</version>
  138. </dependency>
  139.  
  140. <!--<dependency>
  141. <groupId>commons-logging</groupId>
  142. <artifactId>commons-logging</artifactId>
  143. <version>${commons-logging.version}</version>
  144. </dependency>
  145. <dependency>
  146. <groupId>log4j</groupId>
  147. <artifactId>log4j</artifactId>
  148. <version>${log4j.version}</version>
  149. </dependency>
  150. <dependency>
  151. <groupId>org.slf4j</groupId>
  152. <artifactId>slf4j-log4j12</artifactId>
  153. <version>${slf4j-log4j12.version}</version>
  154. </dependency>
  155.  
  156. &lt;!&ndash; Jackson Json处理工具包 &ndash;&gt;
  157. <dependency>
  158. <groupId>com.fasterxml.jackson.core</groupId>
  159. <artifactId>jackson-databind</artifactId>
  160. <version>${jackson.version}</version>
  161. </dependency>
  162. &lt;!&ndash;模板语言支持包&ndash;&gt;
  163. &lt;!&ndash; velocity模板语言支持包 &ndash;&gt;
  164. <dependency>
  165. <groupId>org.apache.velocity</groupId>
  166. <artifactId>velocity</artifactId>
  167. <version>1.7</version>
  168. </dependency>
  169. &lt;!&ndash; velocity-tools &ndash;&gt;
  170. <dependency>
  171. <groupId>org.apache.velocity</groupId>
  172. <artifactId>velocity-tools</artifactId>
  173. <version>2.0</version>
  174. </dependency>
  175. &lt;!&ndash; 不加这个配置volecity视图解析器报错 &ndash;&gt;
  176. <dependency>
  177. <groupId>org.springframework</groupId>
  178. <artifactId>spring-context-support</artifactId>
  179. <version>4.3.0.RELEASE</version>
  180. </dependency>-->
  181.  
  182. <!-- 当当elastic job -->
  183. <!--<dependency>
  184. <groupId>com.dangdang</groupId>
  185. <artifactId>elastic-job-lite-core</artifactId>
  186. <version>2.1.5</version>
  187. </dependency>
  188. &lt;!&ndash; 使用springframework自定义命名空间时引入 &ndash;&gt;
  189. <dependency>
  190. <groupId>com.dangdang</groupId>
  191. <artifactId>elastic-job-lite-spring</artifactId>
  192. <version>2.1.5</version>
  193. </dependency>-->
  194.  
  195. <!--mybatis-plus-->
  196. <dependency>
  197. <groupId>com.baomidou</groupId>
  198. <artifactId>mybatis-plus</artifactId>
  199. <version>${mybatis-plus.version}</version>
  200. </dependency>
  201.  
  202. <!--dubbo-->
  203. <dependency>
  204. <groupId>com.alibaba</groupId>
  205. <artifactId>dubbo</artifactId>
  206. <version>${dubbo.version}</version>
  207. <exclusions>
  208. <exclusion>
  209. <artifactId>spring</artifactId>
  210. <groupId>org.springframework</groupId>
  211. </exclusion>
  212. </exclusions>
  213. </dependency>
  214. <dependency>
  215. <groupId>com.github.sgroschupf</groupId>
  216. <artifactId>zkclient</artifactId>
  217. <version>${zkclient.version}</version>
  218. </dependency>
  219.  
  220. </dependencies>
  221. </dependencyManagement>
  222.  
  223. <build>
  224. <finalName>${project.artifactId}</finalName>
  225. <plugins>
  226. <!-- 资源文件拷贝插件 -->
  227. <plugin>
  228. <groupId>org.apache.maven.plugins</groupId>
  229. <artifactId>maven-resources-plugin</artifactId>
  230. <version>2.7</version>
  231. <configuration>
  232. <encoding>UTF-8</encoding>
  233. </configuration>
  234. </plugin>
  235. <!-- java编译插件 -->
  236. <plugin>
  237. <groupId>org.apache.maven.plugins</groupId>
  238. <artifactId>maven-compiler-plugin</artifactId>
  239. <version>3.2</version>
  240. <configuration>
  241. <source>1.7</source>
  242. <target>1.7</target>
  243. <encoding>UTF-8</encoding>
  244. </configuration>
  245. </plugin>
  246. </plugins>
  247. <pluginManagement>
  248. <plugins>
  249. <!-- 配置Tomcat插件 -->
  250. <plugin>
  251. <groupId>org.apache.tomcat.maven</groupId>
  252. <artifactId>tomcat7-maven-plugin</artifactId>
  253. <version>2.2</version>
  254. </plugin>
  255. </plugins>
  256. </pluginManagement>
  257. </build>
  258. </project>

接口层 lhy-facade

是一个jar包工程,只提供接口,供现实层lhy-service 和 消费者 lhy-consumer 依赖,为了简便,把pojo也放这里了,这样实现和消费者项目两者都能依赖。

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <packaging>jar</packaging>
  8. <artifactId>lhy-facade</artifactId>
  9.  
  10. <parent>
  11. <groupId>com.lhy</groupId>
  12. <version>1.0</version>
  13. <artifactId>lhy-parent</artifactId>
  14. <relativePath>../lhy-parent/pom.xml</relativePath>
  15. </parent>
  16.  
  17. </project>

User.java:

  1. package com.lhy.service.pojo;
  2.  
  3. import java.io.Serializable;
  4. //实现序列化接口
  5. public class User implements Serializable{
  6.  
  7. private int id;
  8.  
  9. private String name;
  10.  
  11. private int sex;
  12.  
  13. //省略getset
  14.  
  15. }

接口 UserFacade.java

  1. package com.lhy.service.user;
  2.  
  3. import com.lhy.service.pojo.User;
  4.  
  5. import java.util.List;
  6.  
  7. public interface UserFacade {
  8.  
  9. public User getById(int id);
  10.  
  11. public int addUser(User user);
  12.  
  13. public List<User> getUsers();
  14. }

接口实现层 lhy-service:

war包工程,依赖父工程和接口层。dao层为了没有单独出来,这里依赖了一个mybatis-plus的mybatis 插件,为了简便没有查库,但是dao的配置没有少,为了完整性、

pom.xml  :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.lhy</groupId>
  8. <artifactId>lhy-service</artifactId>
  9. <version>1.0</version>
  10. <packaging>war</packaging>
  11.  
  12. <name>lhy-service</name>
  13.  
  14. <parent>
  15. <groupId>com.lhy</groupId>
  16. <version>1.0</version>
  17. <artifactId>lhy-parent</artifactId>
  18. <relativePath>../lhy-parent/pom.xml</relativePath>
  19. </parent>
  20.  
  21. <dependencies>
  22.  
  23. <!--接口层-->
  24. <dependency>
  25. <groupId>com.lhy</groupId>
  26. <version>1.0</version>
  27. <artifactId>lhy-facade</artifactId>
  28. </dependency>
  29.  
  30. <!-- Spring -->
  31. <dependency>
  32. <groupId>org.springframework</groupId>
  33. <artifactId>spring-context</artifactId>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.springframework</groupId>
  37. <artifactId>spring-beans</artifactId>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.springframework</groupId>
  41. <artifactId>spring-webmvc</artifactId>
  42. </dependency>
  43. <dependency>
  44. <groupId>org.springframework</groupId>
  45. <artifactId>spring-jdbc</artifactId>
  46. </dependency>
  47. <dependency>
  48. <groupId>org.springframework</groupId>
  49. <artifactId>spring-aspects</artifactId>
  50. </dependency>
  51.  
  52. <!-- JSP相关 -->
  53. <dependency>
  54. <groupId>jstl</groupId>
  55. <artifactId>jstl</artifactId>
  56. </dependency>
  57. <dependency>
  58. <groupId>javax.servlet</groupId>
  59. <artifactId>servlet-api</artifactId>
  60. <scope>provided</scope>
  61. </dependency>
  62. <dependency>
  63. <groupId>javax.servlet</groupId>
  64. <artifactId>jsp-api</artifactId>
  65. <scope>provided</scope>
  66. </dependency>
  67. <!-- 文件上传组件 -->
  68. <dependency>
  69. <groupId>commons-fileupload</groupId>
  70. <artifactId>commons-fileupload</artifactId>
  71. </dependency>
  72.  
  73. <!--数据源相关-->
  74. <!--连接池-->
  75. <dependency>
  76. <groupId>com.alibaba</groupId>
  77. <artifactId>druid</artifactId>
  78. </dependency>
  79. <!-- MySql -->
  80. <dependency>
  81. <groupId>mysql</groupId>
  82. <artifactId>mysql-connector-java</artifactId>
  83. </dependency>
  84. <!--mysql end-->
  85. <!--mybatis-plus-->
  86. <dependency>
  87. <groupId>com.baomidou</groupId>
  88. <artifactId>mybatis-plus</artifactId>
  89. </dependency>
  90.  
  91. <!--dubbo-->
  92. <dependency>
  93. <groupId>com.alibaba</groupId>
  94. <artifactId>dubbo</artifactId>
  95. </dependency>
  96. <!--zkClient-->
  97. <dependency>
  98. <groupId>com.github.sgroschupf</groupId>
  99. <artifactId>zkclient</artifactId>
  100. </dependency>
  101.  
  102. <!-- Jackson Json处理工具包 -->
  103. <dependency>
  104. <groupId>com.fasterxml.jackson.core</groupId>
  105. <artifactId>jackson-databind</artifactId>
  106. </dependency>
  107.  
  108. </dependencies>
  109.  
  110. <build>
  111.  
  112. <resources>
  113. <resource>
  114. <directory>src/main/resource</directory>
  115. <includes>
  116. <include>**/*.properties</include>
  117. <include>**/*.xml</include>
  118. </includes>
  119. <filtering>false</filtering>
  120. </resource>
  121. </resources>
  122.  
  123. <plugins>
  124. <plugin>
  125. <artifactId>maven-compiler-plugin</artifactId>
  126. <configuration>
  127. <source>1.8</source>
  128. <target>1.8</target>
  129. </configuration>
  130. </plugin>
  131. <plugin>
  132. <artifactId>maven-war-plugin</artifactId>
  133. <version>2.4</version>
  134. </plugin>
  135. <!-- 配置Tomcat插件 -->
  136. <plugin>
  137. <groupId>org.apache.tomcat.maven</groupId>
  138. <artifactId>tomcat7-maven-plugin</artifactId>
  139. <configuration>
  140. <!-- 这里配置端口号和访问路径 -->
  141. <port>8080</port>
  142. <path>/</path>
  143. </configuration>
  144. </plugin>
  145. </plugins>
  146. </build>
  147.  
  148. </project>

web.xml :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  5. >
  6. <display-name>lhy-service</display-name>
  7. <!-- 加载spring容器 -->
  8. <context-param>
  9. <param-name>contextConfigLocation</param-name>
  10. <param-value>classpath:spring/spring-context.xml</param-value>
  11. </context-param>
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  14. </listener>
  15.  
  16. <!-- 解决post乱码 -->
  17. <filter>
  18. <filter-name>CharacterEncodingFilter</filter-name>
  19. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  20. <init-param>
  21. <param-name>encoding</param-name>
  22. <param-value>utf-8</param-value>
  23. </init-param>
  24. </filter>
  25. <filter-mapping>
  26. <filter-name>CharacterEncodingFilter</filter-name>
  27. <url-pattern>/*</url-pattern>
  28. </filter-mapping>
  29. <!-- springmvc的前端控制器 -->
  30. <servlet>
  31. <servlet-name>lhy-consumer</servlet-name>
  32. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  33. <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
  34. <init-param>
  35. <param-name>contextConfigLocation</param-name>
  36. <param-value>classpath:spring/springmvc.xml</param-value>
  37. </init-param>
  38. <load-on-startup>1</load-on-startup>
  39. </servlet>
  40. <servlet-mapping>
  41. <servlet-name>lhy-consumer</servlet-name>
  42. <url-pattern>/</url-pattern>
  43. </servlet-mapping>
  44. <welcome-file-list>
  45. <welcome-file>index.html</welcome-file>
  46. <welcome-file>index.htm</welcome-file>
  47. <welcome-file>index.jsp</welcome-file>
  48. <welcome-file>default.html</welcome-file>
  49. <welcome-file>default.htm</welcome-file>
  50. <welcome-file>default.jsp</welcome-file>
  51. </welcome-file-list>
  52. <!-- <error-page>
  53. <error-code>404</error-code>
  54. <location>/static/errorPage/404.html</location>
  55. </error-page>
  56. <error-page>
  57. <error-code>403</error-code>
  58. <location>/static/errorPage/403.html</location>
  59. </error-page>-->
  60. </web-app>

Spring配置:

spring-context.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
  8. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  9. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
  10.  
  11. <!-- 扫描包加载Service实现类 -->
  12. <context:component-scan base-package="com.lhy.service.impl"></context:component-scan>
  13.  
  14. <!-- 数据库连接池 -->
  15. <!-- 加载配置文件 -->
  16. <context:property-placeholder location="classpath:db.properties" />
  17. <!-- 数据库连接池 -->
  18. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
  19. destroy-method="close">
  20. <property name="url" value="${jdbc.url}" />
  21. <property name="username" value="${jdbc.username}" />
  22. <property name="password" value="${jdbc.password}" />
  23. <property name="driverClassName" value="${jdbc.driver}" />
  24. <property name="maxActive" value="10" />
  25. <property name="minIdle" value="5" />
  26. </bean>
  27.  
  28. <!-- 配置扫描包,加载mapper代理对象 -->
  29. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  30. <property name="basePackage" value="com.lhy.service.mapper"></property>
  31. </bean>
  32. <!--调整 SqlSessionFactory 为 MyBatis-Plus 的 SqlSessionFactory-->
  33. <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
  34. <property name="dataSource" ref="dataSource"/>
  35. </bean>
  36.  
  37. <!-- 定义事务 -->
  38. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  39. <property name="dataSource" ref="dataSource" />
  40. </bean>
  41. <!-- 配置 Annotation 驱动,扫描@Transactional注解的类定义事务 -->
  42. <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
  43.  
  44. <!--dubbo配置-->
  45. <import resource="dubbo-provider.xml"/>
  46.  
  47. </beans>

springmvc.xml :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xmlns:aop="http://www.springframework.org/schema/aop"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
  11.  
  12. <context:component-scan base-package="com.lhy.service.controller" />
  13. <mvc:annotation-driven />
  14.  
  15. <bean
  16. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  17. <property name="prefix" value="/page/" />
  18. <property name="suffix" value=".jsp" />
  19. </bean>
  20.  
  21. <!--配置velocity 前端的模板语言-->
  22. <!--velocity配置-->
  23. <!-- <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
  24. <property name="resourceLoaderPath" value="/template/"/>
  25. <property name="velocityProperties">
  26. <props>
  27. <prop key="input.encoding">utf-8</prop>
  28. <prop key="output.encoding">utf-8</prop>
  29. <prop key="file.resource.loader.cache">false</prop>
  30. <prop key="file.resource.loader.modificationCheckInterval">1</prop>
  31. <prop key="velocimacro.library.autoreload">false</prop>
  32. </props>
  33. </property>
  34. </bean> -->
  35.  
  36. <!--velocity模板语言-->
  37. <!-- <bean class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
  38. <property name="suffix" value=".vm"/>
  39. <property name="contentType" value="text/html;charset=utf-8"/>
  40. <property name="dateToolAttribute" value="date"/>日期函数名称
  41. </bean> -->
  42.  
  43. <!-- 静态资源映射 -->
  44. <mvc:resources mapping="/static/**" location="/static/"/>
  45. <mvc:resources mapping="/css/**" location="/css/"/>
  46.  
  47. <!-- 定义文件上传解析器 -->
  48. <!-- <bean id="multipartResolver"
  49. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  50. 设定默认编码
  51. <property name="defaultEncoding" value="UTF-8"></property>
  52. 设定文件上传的最大值5MB,5*1024*1024
  53. <property name="maxUploadSize" value="5242880"></property>
  54. </bean> -->
  55.  
  56. <!-- 开启aop代理 ,spring-shirl里就可以不用配置lifecycleBeanPostProcessor了-->
  57. <aop:config proxy-target-class="true"></aop:config>
  58.  
  59. <!-- 全局异常处理 ,只要实现了HandlerExceptionResolver接口的就是全局异常处理器-->
  60. <!-- <bean class="com.lhy.shiro.exception.CustomExceptionResolver"/> -->
  61.  
  62. </beans>

dubbo-provider.xml  :

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  7.  
  8. <!--提供方应用信息,用户计算依赖关系-->
  9. <dubbo:application name="lhy-service"/>
  10.  
  11. <!--使用zookeeper注册中心暴露服务地址-->
  12. <dubbo:registry address="zookeeper://192.168.85.3:2181?backup=192.168.85.4:2181,192.168.85.5:2181"/>
  13.  
  14. <!-- 用dubbo协议在20880端口暴露服务 -->
  15. <dubbo:protocol name="dubbo" port="20880" />
  16.  
  17. <!-- 声明需要暴露的服务接口 ,写操作可设置retries="0"避免重复调用SOA服务-->
  18. <dubbo:service retries="0" interface="com.lhy.service.user.UserFacade" ref="userFacade" />
  19.  
  20. </beans>

db.properties :

  1. jdbc.driver=com.mysql.jdbc.Driver
  2. jdbc.url=jdbc:mysql://127.0.0.1:3306/lhy?characterEncoding=utf-8
  3. jdbc.username=root
  4. jdbc.password=root

接口实现类:UserFacade.java

  1. package com.lhy.service.impl;
  2.  
  3. import com.lhy.service.pojo.User;
  4. import com.lhy.service.user.UserFacade;
  5. import org.springframework.stereotype.Service;
  6.  
  7. import java.util.ArrayList;
  8. import java.util.List;
  9.  
  10. @Service("userFacade")
  11. public class UserFacadeImpl implements UserFacade{
  12.  
  13. @Override
  14. public User getById(int id) {
  15. User user = new User();
  16. user.setId(id);
  17. user.setName("张三");
  18. return user;
  19. }
  20.  
  21. @Override
  22. public int addUser(User user) {
  23. return 1;
  24. }
  25.  
  26. @Override
  27. public List<User> getUsers() {
  28. List<User> list = new ArrayList<>();
  29.  
  30. User u1 = new User();
  31. u1.setId(1);
  32. u1.setName("阿皮");
  33.  
  34. User u2 = new User();
  35. u2.setId(2);
  36. u2.setName("喜觉");
  37.  
  38. User u3 = new User();
  39. u3.setId(3);
  40. u3.setName("虚竹");
  41.  
  42. User u4 = new User();
  43. u3.setId(4);
  44. u3.setName("wooubeibei");
  45.  
  46. list.add(u1);
  47. list.add(u2);
  48. list.add(u3);
  49. list.add(u4);
  50. return list;
  51. }
  52. }

消费者 lhy-consumer :

war包工程,依赖父工程和接口层,配置和接口实现差不多,

不一样的是dubbo配置:

dubbo-consumer.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  6. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  7.  
  8. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  9. <dubbo:application name="lhy-consumer" />
  10.  
  11. <!--使用zookeeper注册中心暴露服务地址-->
  12. <dubbo:registry address="zookeeper://192.168.85.3:2181?backup=192.168.85.4:2181,192.168.85.5:2181"/>
  13.  
  14. <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
  15. <dubbo:reference id="userFacade" interface="com.lhy.service.user.UserFacade" />
  16. </beans>

定义一个UserService,实现类里调用 dubbo接口:

  1. package com.lhy.consumer.service.impl;
  2.  
  3. import com.lhy.consumer.service.UserService;
  4. import com.lhy.service.pojo.User;
  5. import com.lhy.service.user.UserFacade;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8.  
  9. import java.util.List;
  10.  
  11. @Service
  12. public class UserServiceImpl implements UserService {
  13.  
  14. @Autowired
  15. private UserFacade userFacade;
  16.  
  17. @Override
  18. public List<User> getUsers() {
  19. return userFacade.getUsers();
  20. }
  21. }

UserController来调用一下:

  1. package com.lhy.consumer.controller;
  2.  
  3. import com.lhy.consumer.service.UserService;
  4. import com.lhy.service.pojo.User;
  5. import com.lhy.service.user.UserFacade;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10.  
  11. import java.util.List;
  12.  
  13. @Controller
  14. @RequestMapping("/user")
  15. public class UserController {
  16.  
  17. @Autowired
  18. private UserService userService;
  19.  
  20. @RequestMapping("/hello")
  21. @ResponseBody
  22. public String hello(){
  23. return "hello";
  24. }
  25.  
  26. @RequestMapping("/toHelloPage")
  27. public String toHelloPage(){
  28. return "hello";
  29. }
  30.  
  31. @RequestMapping("/getUsers")
  32. public @ResponseBody List<User> getUsers(){
  33. List<User> list = userService.getUsers();
  34. return list;
  35. }
  36. }

代码打好后,先把接口层mvn install到本地仓库,依次启动 生产者 lhy-service 、消费者lhy-consumer :

访问一下消费者:http://localhost:8081/user/getUsers

可以看到,成功调用了提供者的接口,再看dubbo管控台:有了一个服务

可以利用管控台对服务进行各种治理了

只用zk查看工具看zk上注册的信息:

Dubbo--002--例子程序的更多相关文章

  1. 【转】Dubbo使用例子并且和Spring集成使用

    一.编写客户端和服务器端共用接口类1.登录接口类public interface LoginService {    public User login(String name, String psw ...

  2. [OSG]OSG例子程序简介

    1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...

  3. C语言字符串函数例子程序大全 – string相关

    关于字符串函数的应用细则,例子程序 – jerny 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source) ...

  4. Spring Cloud Eureka Server例子程序

    Spring-Cloud-Eureka-Server 及Client 例子程序 参考源代码:https://github.com/spring-cloud-samples/eureka 可以启动成功, ...

  5. [原][OSG]OSG例子程序简介

    1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.M ...

  6. ActiveMQ学习--002--Topic消息例子程序

    一.非持久的Topic消息示例 注意 此种方式消费者只能接收到 消费者启动之后,发送者发送的消息. 发送者 package com.lhy.mq.helloworld; import java.uti ...

  7. 运行hadoop自带的wordcount例子程序

    1.准备文件 [root@master ~]# cat input.txt hello java hello python hello c hello java hello js hello html ...

  8. [OSG][osgEarth]osgEarth例子程序简介

    1.osgearth_graticule:生成经纬线. 2.osgearth_annotation:各类标注(点.线.面.模型.文本等). 3.osgearth_city:加载一个城市三维模型,可以浏 ...

  9. dubbo+zookeeper例子

    0.原理   Alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo.hsf),jms消息服务(napoli.notify),KV数据库(tair)等.这个 ...

  10. 如何快速地编写和运行一个属于自己的 MapReduce 例子程序

    大数据的时代, 到处张嘴闭嘴都是Hadoop, MapReduce, 不跟上时代怎么行? 可是对一个hadoop的新手, 写一个属于自己的MapReduce程序还是小有点难度的, 需要建立一个mave ...

随机推荐

  1. 根据方法名获取方法Body Content

    利用 MethodBody类的GetILAsByteArray方法可以获取到返回字节数组的MSIL的body.然后再去解析此字节数组, 可以得到MSIL,然后你再去解析MSIL,你就可以得到你想到so ...

  2. goole Advance client 离线安装

    1.下载插件:Advanced Rest Client 2.最新版的Chrome不支持本地安装插件,所以我们要使能开发者模式 3.把插件后缀名crx改为zip 4.解压,点击‘加载正在开发的扩展程序’ ...

  3. php 正则截取文章图片

    preg_match ("<img.*src=[\"](.*?)[\"].*?>",$test,$match); //获取图片 echo $matc ...

  4. java中的标识符、关键字、保留字

    Java中关键字(keyword)和保留字(reservedword) Keyword :Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等. Reserv ...

  5. Linux学习(1)- TCP/IP网络协议基础

    Linux学习(1)- TCP/IP网络协议基础 一.TCP/IP 简介 学习内容 TCP/IP(Transmission Control Protocol/Internet Protocol)是传输 ...

  6. python一键升级所有第三方库

    import pip from subprocess import call for dist in pip.get_installed_distributions(): call("pip ...

  7. 项目管理系统Redmine(v1.1.2)安装手记

    一.环境   1.硬件 普通PC.   2.软件 Windows 2003操作系统.   二.下载必要的软件   1.Ruby 1.8.x Redmine是基于Ruby On Rails的软件,所以首 ...

  8. PAT甲级 1129. Recommendation System (25)

    1129. Recommendation System (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  9. 中美会计准则差异比较(PRC GAAP VS US GAAP)

    http://bbs.chinaacc.com/forum-2-43/topic-2023118.html 一.中美会计准则的实质性差别    rule based vs principle base ...

  10. MacOS卸载Jenkins安装包

    /Library/Application\ Support/Jenkins/Uninstall.command