5.Dubbo之Spring XML配置

谁借莪1个温暖的怀抱¢ 2022-05-15 01:45 270阅读 0赞

一、演示

1.包结构

70

2.dubbo-spring-xml

maven父工程

2.1pom.xml配置

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>org.niugang</groupId>
  5. <artifactId>dubbo-spring-xml</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. <packaging>pom</packaging>
  8. <modules>
  9. <module>dubbo-spring-xml-provider</module>
  10. <module>dubbo-spring-xml-customer</module>
  11. <module>dubbo-spring-xml-api</module>
  12. </modules>
  13. <properties>
  14. <!-- Generic properties -->
  15. <java.version>1.7</java.version>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  18. <!-- Web -->
  19. <jsp.version>2.2</jsp.version>
  20. <jstl.version>1.2</jstl.version>
  21. <servlet.version>3.1.0</servlet.version>
  22. <!-- Spring -->
  23. <spring-framework.version>4.3.10.RELEASE</spring-framework.version>
  24. <!-- Logging -->
  25. <logback.version>1.0.13</logback.version>
  26. <slf4j.version>1.7.5</slf4j.version>
  27. </properties>
  28. <dependencyManagement>
  29. <dependencies>
  30. <dependency>
  31. <groupId>javax</groupId>
  32. <artifactId>javaee-web-api</artifactId>
  33. <version>7.0</version>
  34. <scope>provided</scope>
  35. </dependency>
  36. <!-- Spring MVC -->
  37. <dependency>
  38. <groupId>org.springframework</groupId>
  39. <artifactId>spring-webmvc</artifactId>
  40. <version>${spring-framework.version}</version>
  41. </dependency>
  42. <!-- 其他web依赖 -->
  43. <dependency>
  44. <groupId>javax.servlet</groupId>
  45. <artifactId>jstl</artifactId>
  46. <version>${jstl.version}</version>
  47. </dependency>
  48. <dependency>
  49. <groupId>javax.servlet</groupId>
  50. <artifactId>javax.servlet-api</artifactId>
  51. <version>${servlet.version}</version>
  52. <scope>provided</scope>
  53. </dependency>
  54. <dependency>
  55. <groupId>javax.servlet.jsp</groupId>
  56. <artifactId>jsp-api</artifactId>
  57. <version>${jsp.version}</version>
  58. <scope>provided</scope>
  59. </dependency>
  60. <!-- Spring and Transactions -->
  61. <dependency>
  62. <groupId>org.springframework</groupId>
  63. <artifactId>spring-tx</artifactId>
  64. <version>${spring-framework.version}</version>
  65. </dependency>
  66. <!-- 使用SLF4J和LogBack作为日志 -->
  67. <dependency>
  68. <groupId>org.slf4j</groupId>
  69. <artifactId>slf4j-api</artifactId>
  70. <version>${slf4j.version}</version>
  71. </dependency>
  72. <dependency>
  73. <groupId>log4j</groupId>
  74. <artifactId>log4j</artifactId>
  75. <version>1.2.16</version>
  76. </dependency>
  77. <dependency>
  78. <groupId>org.slf4j</groupId>
  79. <artifactId>jcl-over-slf4j</artifactId>
  80. <version>${slf4j.version}</version>
  81. </dependency>
  82. <dependency>
  83. <groupId>ch.qos.logback</groupId>
  84. <artifactId>logback-classic</artifactId>
  85. <version>${logback.version}</version>
  86. </dependency>
  87. <dependency>
  88. <groupId>ch.qos.logback</groupId>
  89. <artifactId>logback-core</artifactId>
  90. <version>${logback.version}</version>
  91. </dependency>
  92. <dependency>
  93. <groupId>ch.qos.logback</groupId>
  94. <artifactId>logback-access</artifactId>
  95. <version>${logback.version}</version>
  96. </dependency>
  97. <!--对json和xml格式的支持 -->
  98. <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId>
  99. <artifactId>jackson-dataformat-xml</artifactId> <version>2.5.3</version>
  100. </dependency> -->
  101. <!--配置springmvc信息转化为json所需的json包 -->
  102. <dependency>
  103. <groupId>com.fasterxml.jackson.core</groupId>
  104. <artifactId>jackson-databind</artifactId>
  105. <version>2.8.6</version>
  106. </dependency>
  107. <dependency>
  108. <groupId>com.fasterxml.jackson.core</groupId>
  109. <artifactId>jackson-databind</artifactId>
  110. <version>2.8.6</version>
  111. </dependency>
  112. <dependency>
  113. <groupId>com.fasterxml.jackson.core</groupId>
  114. <artifactId>jackson-annotations</artifactId>
  115. <version>2.8.6</version>
  116. </dependency>
  117. <dependency>
  118. <groupId>com.fasterxml.jackson.core</groupId>
  119. <artifactId>jackson-core</artifactId>
  120. <version>2.8.6</version>
  121. </dependency>
  122. <!-- 非必需,可简化IO操作 -->
  123. <dependency>
  124. <groupId>commons-io</groupId>
  125. <artifactId>commons-io</artifactId>
  126. <version>2.3</version>
  127. </dependency>
  128. <dependency>
  129. <groupId>org.springframework</groupId>
  130. <artifactId>spring-test</artifactId>
  131. <version>${spring-framework.version}</version>
  132. <scope>test</scope>
  133. </dependency>
  134. <dependency>
  135. <groupId>org.springframework</groupId>
  136. <artifactId>spring-jdbc</artifactId>
  137. <version>${spring-framework.version}</version>
  138. <scope>test</scope>
  139. </dependency>
  140. <dependency>
  141. <groupId>org.aspectj</groupId>
  142. <artifactId>aspectjrt</artifactId>
  143. <version>1.8.6</version>
  144. </dependency>
  145. <!--aspectj依赖 -->
  146. <dependency>
  147. <groupId>org.aspectj</groupId>
  148. <artifactId>aspectjtools</artifactId>
  149. <version>1.8.9</version>
  150. </dependency>
  151. <dependency>
  152. <groupId>org.aspectj</groupId>
  153. <artifactId>aspectjweaver</artifactId>
  154. <version>1.7.4</version>
  155. </dependency>
  156. <dependency>
  157. <groupId>junit</groupId>
  158. <artifactId>junit</artifactId>
  159. <version>4.11</version>
  160. <scope>test</scope>
  161. </dependency>
  162. <!--dubbo -->
  163. <dependency>
  164. <groupId>com.alibaba</groupId>
  165. <artifactId>dubbo</artifactId>
  166. <version>2.5.8</version>
  167. </dependency>
  168. <!--redis -->
  169. <dependency>
  170. <groupId>redis.clients</groupId>
  171. <artifactId>jedis</artifactId>
  172. <version>2.9.0</version>
  173. </dependency>
  174. </dependencies>
  175. </dependencyManagement>
  176. </project>

3.dubbo-spring-xml-api

对外暴露RPC接口模块

3.1pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>org.niugang</groupId>
  5. <artifactId>dubbo-spring-xml</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7. </parent>
  8. <artifactId>dubbo-spring-xml-api</artifactId>
  9. </project>

3.2Bean配置

70 1

  1. package org.niugang.bean;
  2. /**
  3. *
  4. * @ClassName: DefaultBean
  5. * @Description:默认Bean
  6. * @author: niugang
  7. * @date: 2018年8月22日 下午5:30:27
  8. * @Copyright: 863263957@qq.com. All rights reserved.
  9. *
  10. */
  11. public class DefaultBean {
  12. private String str;
  13. private String methodName;
  14. private long timestamp;
  15. public String getStr() {
  16. return str;
  17. }
  18. public void setStr(String str) {
  19. this.str = str;
  20. }
  21. public String getMethodName() {
  22. return methodName;
  23. }
  24. public void setMethodName(String methodName) {
  25. this.methodName = methodName;
  26. }
  27. public long getTimestamp() {
  28. return timestamp;
  29. }
  30. public void setTimestamp(long timestamp) {
  31. this.timestamp = timestamp;
  32. }
  33. @Override
  34. public String toString() {
  35. return "DefaultBean [str=" + str + ", methodName=" + methodName + ", timestamp=" + timestamp + "]";
  36. }
  37. }

3.3Service

  1. package org.niugang.service;
  2. /**
  3. *
  4. * @ClassName: DefaultApiService
  5. * @Description:对外暴露API接口
  6. * @author: niugang
  7. * @date: 2018年8月22日 下午5:27:21
  8. * @Copyright: 863263957@qq.com. All rights reserved.
  9. *
  10. */
  11. public interface DefaultApiService {
  12. /**
  13. * 默认方法
  14. * @param str
  15. * @return
  16. */
  17. String defaultMethod(String str);
  18. }

4.dubbo-spring-xml-provider

服务提供者

将dubbo-spring-xml-api 打成jar包dubbo-spring-xml-provider中。

70 2

4.1pom.xml

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.niugang</groupId>
  8. <artifactId>dubbo-spring-xml</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. </parent>
  11. <artifactId>dubbo-spring-xml-provider</artifactId>
  12. <packaging>jar</packaging>
  13. <name>dubbo-spring-xml-provider</name>
  14. <url>http://maven.apache.org</url>
  15. <dependencies>
  16. <dependency>
  17. <groupId>javax</groupId>
  18. <artifactId>javaee-web-api</artifactId>
  19. <scope>provided</scope>
  20. </dependency>
  21. <!-- Spring MVC -->
  22. <dependency>
  23. <groupId>org.springframework</groupId>
  24. <artifactId>spring-webmvc</artifactId>
  25. </dependency>
  26. <!-- 其他web依赖 -->
  27. <dependency>
  28. <groupId>javax.servlet</groupId>
  29. <artifactId>jstl</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>javax.servlet</groupId>
  33. <artifactId>javax.servlet-api</artifactId>
  34. <scope>provided</scope>
  35. </dependency>
  36. <dependency>
  37. <groupId>javax.servlet.jsp</groupId>
  38. <artifactId>jsp-api</artifactId>
  39. <scope>provided</scope>
  40. </dependency>
  41. <!-- Spring and Transactions -->
  42. <dependency>
  43. <groupId>org.springframework</groupId>
  44. <artifactId>spring-tx</artifactId>
  45. </dependency>
  46. <!-- 使用SLF4J和LogBack作为日志 -->
  47. <dependency>
  48. <groupId>org.slf4j</groupId>
  49. <artifactId>slf4j-api</artifactId>
  50. </dependency>
  51. <dependency>
  52. <groupId>log4j</groupId>
  53. <artifactId>log4j</artifactId>
  54. </dependency>
  55. <dependency>
  56. <groupId>org.slf4j</groupId>
  57. <artifactId>jcl-over-slf4j</artifactId>
  58. </dependency>
  59. <dependency>
  60. <groupId>ch.qos.logback</groupId>
  61. <artifactId>logback-classic</artifactId>
  62. </dependency>
  63. <dependency>
  64. <groupId>ch.qos.logback</groupId>
  65. <artifactId>logback-core</artifactId>
  66. </dependency>
  67. <dependency>
  68. <groupId>ch.qos.logback</groupId>
  69. <artifactId>logback-access</artifactId>
  70. </dependency>
  71. <!--对json和xml格式的支持 -->
  72. <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId>
  73. <version>2.5.3</version> </dependency> -->
  74. <!--配置springmvc信息转化为json所需的json包 -->
  75. <dependency>
  76. <groupId>com.fasterxml.jackson.core</groupId>
  77. <artifactId>jackson-databind</artifactId>
  78. </dependency>
  79. <dependency>
  80. <groupId>com.fasterxml.jackson.core</groupId>
  81. <artifactId>jackson-databind</artifactId>
  82. </dependency>
  83. <dependency>
  84. <groupId>com.fasterxml.jackson.core</groupId>
  85. <artifactId>jackson-annotations</artifactId>
  86. </dependency>
  87. <dependency>
  88. <groupId>com.fasterxml.jackson.core</groupId>
  89. <artifactId>jackson-core</artifactId>
  90. </dependency>
  91. <!-- 非必需,可简化IO操作 -->
  92. <dependency>
  93. <groupId>commons-io</groupId>
  94. <artifactId>commons-io</artifactId>
  95. </dependency>
  96. <dependency>
  97. <groupId>org.springframework</groupId>
  98. <artifactId>spring-test</artifactId>
  99. <scope>test</scope>
  100. </dependency>
  101. <dependency>
  102. <groupId>org.springframework</groupId>
  103. <artifactId>spring-jdbc</artifactId>
  104. <scope>test</scope>
  105. </dependency>
  106. <dependency>
  107. <groupId>org.aspectj</groupId>
  108. <artifactId>aspectjrt</artifactId>
  109. </dependency>
  110. <!--aspectj依赖 -->
  111. <dependency>
  112. <groupId>org.aspectj</groupId>
  113. <artifactId>aspectjtools</artifactId>
  114. </dependency>
  115. <dependency>
  116. <groupId>org.aspectj</groupId>
  117. <artifactId>aspectjweaver</artifactId>
  118. </dependency>
  119. <dependency>
  120. <groupId>junit</groupId>
  121. <artifactId>junit</artifactId>
  122. <scope>test</scope>
  123. </dependency>
  124. <!--dubbo -->
  125. <dependency>
  126. <groupId>com.alibaba</groupId>
  127. <artifactId>dubbo</artifactId>
  128. </dependency>
  129. <!--redis -->
  130. <dependency>
  131. <groupId>redis.clients</groupId>
  132. <artifactId>jedis</artifactId>
  133. </dependency>
  134. <dependency>
  135. <groupId>org.niugang</groupId>
  136. <artifactId>dubbo-spring-xml-api</artifactId>
  137. <version>0.0.1-SNAPSHOT</version>
  138. </dependency>
  139. </dependencies>
  140. <build>
  141. <plugins>
  142. <plugin>
  143. <groupId>org.apache.maven.plugins</groupId>
  144. <artifactId>maven-compiler-plugin</artifactId>
  145. <version>2.3.2</version>
  146. <configuration>
  147. <source>${java.version}</source>
  148. <target>${java.version}</target>
  149. </configuration>
  150. </plugin>
  151. <plugin>
  152. <groupId>org.apache.maven.plugins</groupId>
  153. <artifactId>maven-war-plugin</artifactId>
  154. <version>2.3</version>
  155. <configuration>
  156. <failOnMissingWebXml>false</failOnMissingWebXml>
  157. </configuration>
  158. </plugin>
  159. </plugins>
  160. </build>
  161. </project>

4.2service对外暴露接口实现类

  1. package org.niugang.service;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Random;
  5. import org.niugang.bean.DefaultBean;
  6. /**
  7. *
  8. * @ClassName: DefaultDemoService
  9. * @Description:对外暴露接口实现类
  10. * @author: niugang
  11. * @date: 2018年8月21日 下午8:18:29
  12. * @Copyright: 863263957@qq.com. All rights reserved.
  13. *
  14. */
  15. public class DefaultServiceImpl implements DefaultApiService {
  16. //模拟数据
  17. public static List<DefaultBean> list = new ArrayList<DefaultBean>();
  18. static {
  19. DefaultBean defaultBean = new DefaultBean();
  20. defaultBean.setStr("1");
  21. defaultBean.setMethodName("defaultMethod");
  22. defaultBean.setTimestamp(System.currentTimeMillis());
  23. list.add(defaultBean);
  24. DefaultBean defaultBean2 = new DefaultBean();
  25. defaultBean2.setStr("2");
  26. defaultBean2.setMethodName("defaultMethod2");
  27. defaultBean2.setTimestamp(System.currentTimeMillis());
  28. list.add(defaultBean2);
  29. DefaultBean defaultBean3 = new DefaultBean();
  30. defaultBean3.setStr("3");
  31. defaultBean3.setMethodName("defaultMethod3");
  32. defaultBean3.setTimestamp(System.currentTimeMillis());
  33. list.add(defaultBean);
  34. DefaultBean defaultBean4 = new DefaultBean();
  35. defaultBean4.setStr("4");
  36. defaultBean4.setMethodName("defaultMethod4");
  37. defaultBean4.setTimestamp(System.currentTimeMillis());
  38. list.add(defaultBean4);
  39. DefaultBean defaultBean5 = new DefaultBean();
  40. defaultBean5.setStr("5");
  41. defaultBean5.setMethodName("defaultMethod5");
  42. defaultBean5.setTimestamp(System.currentTimeMillis());
  43. list.add(defaultBean5);
  44. }
  45. @Override
  46. public String defaultMethod(String str) {
  47. Random random = new Random();
  48. int nextInt = random.nextInt(6);
  49. String res = null;
  50. if (nextInt > 0) {
  51. DefaultBean defaultBean = list.get(nextInt - 1);
  52. res = defaultBean.getStr() + "#" + defaultBean.getMethodName() + "#" + defaultBean.getTimestamp()
  53. + "###^^^^^^^^^^^" + str + "^^^^^^^^^^^^";
  54. } else {
  55. DefaultBean defaultBean = list.get(nextInt);
  56. res = defaultBean.getStr() + "#" + defaultBean.getMethodName() + "#" + defaultBean.getTimestamp()
  57. + "###^^^^^^^^^^^" + str + "^^^^^^^^^^^^";
  58. }
  59. return res;
  60. }
  61. }

4.3application.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:p="http://www.springframework.org/schema/p"
  5. xmlns:context="http://www.springframework.org/schema/context"
  6. xmlns:mvc="http://www.springframework.org/schema/mvc"
  7. xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
  8. xsi:schemaLocation="
  9. http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11. http://www.springframework.org/schema/context
  12. http://www.springframework.org/schema/context/spring-context.xsd
  13. http://www.springframework.org/schema/mvc
  14. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  15. <import resource="provider.xml" />
  16. <!--組件扫描 -->
  17. <context:component-scan base-package="org.niugang" />
  18. <!--注解扫描 -->
  19. <mvc:annotation-driven />
  20. </beans>

4.4provider.xml配置

dubbo配置

  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:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo
  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  8. <!-- http://dubbo.apache.org/schema/dubbo/dubbo.xsd 上面配置为这个一直报错,改为 http://code.alibabatech.com/schema/dubbo/dubbo.xsd -->
  9. <!--用于配置当前应用信息,不管该应用是提供者还是消费者 -->
  10. <dubbo:application name="hello-world-app" />
  11. <!-- 用于配置连接注册中心相关信息 -->
  12. <dubbo:registry address="redis://localhost:6379"
  13. timeout="30000">
  14. <!--配置redis连接参数 -->
  15. <!--具体参数配置见com.alibaba.dubbo.registry.redis.RedisRegistry.class -->
  16. <dubbo:parameter key="max.idle" value="10" />
  17. <dubbo:parameter key="min.idle" value="5" />
  18. <dubbo:parameter key="max.active" value="20" />
  19. <dubbo:parameter key="max.total" value="100" />
  20. </dubbo:registry>
  21. <!-- 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 -->
  22. <dubbo:protocol name="dubbo" port="20880" accesslog="true" />
  23. <!-- 实现类 -->
  24. <bean id="defaultService" class="org.niugang.service.DefaultServiceImpl" />
  25. <!--用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 -->
  26. <dubbo:service interface="org.niugang.service.DefaultApiService"
  27. ref="defaultService" />
  28. </beans>

redis注册源码见com.alibaba.dubbo.registry.redis.RedisRegistry.class

4.5web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app id="WebApp_ID" version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  5. <!-- 上下文配置文件位置 -->
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <!-- spring 配置文件所在位置,启动 spring 时会去该路径下查找该配置文件 -->
  9. <param-value>classpath:applicationContext.xml</param-value>
  10. </context-param>
  11. <!-- spring 上下文监听器,初始化启动容器时启动 spring -->
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener
  14. </listener-class>
  15. </listener>
  16. <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 -->
  17. <servlet>
  18. <servlet-name>dispatcher</servlet-name>
  19. <servlet-class>org.springframework.web.servlet.DispatcherServlet
  20. </servlet-class>
  21. <init-param>
  22. <param-name>contextConfigLocation</param-name>
  23. <param-value>classpath:applicationContext.xml</param-value>
  24. </init-param>
  25. <load-on-startup>1</load-on-startup>
  26. </servlet>
  27. <servlet-mapping>
  28. <servlet-name>dispatcher</servlet-name>
  29. <url-pattern>/</url-pattern>
  30. </servlet-mapping>
  31. <!-- spring 编码过滤器 -->
  32. <filter>
  33. <filter-name>characterEncodingFilter</filter-name>
  34. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  35. <init-param>
  36. <param-name>encoding</param-name>
  37. <param-value>UTF-8</param-value>
  38. </init-param>
  39. <init-param>
  40. <param-name>forceEncoding</param-name>
  41. <param-value>true</param-value>
  42. </init-param>
  43. </filter>
  44. <!-- 编码过滤器过滤的路径 -->
  45. <filter-mapping>
  46. <filter-name>characterEncodingFilter</filter-name>
  47. <url-pattern>/*</url-pattern>
  48. </filter-mapping>
  49. </web-app>

5.dubbo-spring-xml-customer

服务消费者

需要引入dubbo-spring-xml-api.jar文件

70 3

5.1pom.xml

  1. <?xml version="1.0"?>
  2. <project
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
  4. xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.niugang</groupId>
  8. <artifactId>dubbo-spring-xml</artifactId>
  9. <version>0.0.1-SNAPSHOT</version>
  10. </parent>
  11. <artifactId>dubbo-spring-xml-customer</artifactId>
  12. <packaging>jar</packaging>
  13. <name>dubbo-spring-xml-customer</name>
  14. <url>http://maven.apache.org</url>
  15. <dependencies>
  16. <dependency>
  17. <groupId>junit</groupId>
  18. <artifactId>junit</artifactId>
  19. <scope>test</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>javax</groupId>
  23. <artifactId>javaee-web-api</artifactId>
  24. <scope>provided</scope>
  25. </dependency>
  26. <!-- Spring MVC -->
  27. <dependency>
  28. <groupId>org.springframework</groupId>
  29. <artifactId>spring-webmvc</artifactId>
  30. </dependency>
  31. <!-- 其他web依赖 -->
  32. <dependency>
  33. <groupId>javax.servlet</groupId>
  34. <artifactId>jstl</artifactId>
  35. </dependency>
  36. <dependency>
  37. <groupId>javax.servlet</groupId>
  38. <artifactId>javax.servlet-api</artifactId>
  39. <scope>provided</scope>
  40. </dependency>
  41. <dependency>
  42. <groupId>javax.servlet.jsp</groupId>
  43. <artifactId>jsp-api</artifactId>
  44. <scope>provided</scope>
  45. </dependency>
  46. <!-- Spring and Transactions -->
  47. <dependency>
  48. <groupId>org.springframework</groupId>
  49. <artifactId>spring-tx</artifactId>
  50. </dependency>
  51. <!-- 使用SLF4J和LogBack作为日志 -->
  52. <dependency>
  53. <groupId>org.slf4j</groupId>
  54. <artifactId>slf4j-api</artifactId>
  55. </dependency>
  56. <dependency>
  57. <groupId>log4j</groupId>
  58. <artifactId>log4j</artifactId>
  59. </dependency>
  60. <dependency>
  61. <groupId>org.slf4j</groupId>
  62. <artifactId>jcl-over-slf4j</artifactId>
  63. </dependency>
  64. <dependency>
  65. <groupId>ch.qos.logback</groupId>
  66. <artifactId>logback-classic</artifactId>
  67. </dependency>
  68. <dependency>
  69. <groupId>ch.qos.logback</groupId>
  70. <artifactId>logback-core</artifactId>
  71. </dependency>
  72. <dependency>
  73. <groupId>ch.qos.logback</groupId>
  74. <artifactId>logback-access</artifactId>
  75. </dependency>
  76. <!--对json和xml格式的支持 -->
  77. <!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId>
  78. <version>2.5.3</version> </dependency> -->
  79. <!--配置springmvc信息转化为json所需的json包 -->
  80. <dependency>
  81. <groupId>com.fasterxml.jackson.core</groupId>
  82. <artifactId>jackson-databind</artifactId>
  83. </dependency>
  84. <dependency>
  85. <groupId>com.fasterxml.jackson.core</groupId>
  86. <artifactId>jackson-databind</artifactId>
  87. </dependency>
  88. <dependency>
  89. <groupId>com.fasterxml.jackson.core</groupId>
  90. <artifactId>jackson-annotations</artifactId>
  91. </dependency>
  92. <dependency>
  93. <groupId>com.fasterxml.jackson.core</groupId>
  94. <artifactId>jackson-core</artifactId>
  95. </dependency>
  96. <!-- 非必需,可简化IO操作 -->
  97. <dependency>
  98. <groupId>commons-io</groupId>
  99. <artifactId>commons-io</artifactId>
  100. </dependency>
  101. <dependency>
  102. <groupId>org.springframework</groupId>
  103. <artifactId>spring-test</artifactId>
  104. <scope>test</scope>
  105. </dependency>
  106. <dependency>
  107. <groupId>org.springframework</groupId>
  108. <artifactId>spring-jdbc</artifactId>
  109. <scope>test</scope>
  110. </dependency>
  111. <dependency>
  112. <groupId>org.aspectj</groupId>
  113. <artifactId>aspectjrt</artifactId>
  114. </dependency>
  115. <!--aspectj依赖 -->
  116. <dependency>
  117. <groupId>org.aspectj</groupId>
  118. <artifactId>aspectjtools</artifactId>
  119. </dependency>
  120. <dependency>
  121. <groupId>org.aspectj</groupId>
  122. <artifactId>aspectjweaver</artifactId>
  123. </dependency>
  124. <!--dubbo -->
  125. <dependency>
  126. <groupId>com.alibaba</groupId>
  127. <artifactId>dubbo</artifactId>
  128. </dependency>
  129. <!--redis -->
  130. <dependency>
  131. <groupId>redis.clients</groupId>
  132. <artifactId>jedis</artifactId>
  133. </dependency>
  134. <!--引入服务提供者 rpc接口-->
  135. <dependency>
  136. <groupId>org.niugang</groupId>
  137. <artifactId>dubbo-spring-xml-api</artifactId>
  138. <version>0.0.1-SNAPSHOT</version>
  139. </dependency>
  140. </dependencies>
  141. <build>
  142. <plugins>
  143. <plugin>
  144. <groupId>org.apache.maven.plugins</groupId>
  145. <artifactId>maven-compiler-plugin</artifactId>
  146. <version>2.3.2</version>
  147. <configuration>
  148. <source>${java.version}</source>
  149. <target>${java.version}</target>
  150. </configuration>
  151. </plugin>
  152. <plugin>
  153. <groupId>org.apache.maven.plugins</groupId>
  154. <artifactId>maven-war-plugin</artifactId>
  155. <version>2.3</version>
  156. <configuration>
  157. <failOnMissingWebXml>false</failOnMissingWebXml>
  158. </configuration>
  159. </plugin>
  160. </plugins>
  161. <finalName>dubbo-spring-xml-customer</finalName>
  162. </build>
  163. </project>

5.1消费服务

  1. package org.niugang.controller;
  2. import javax.annotation.Resource;
  3. import org.niugang.service.DefaultApiService;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestParam;
  6. import org.springframework.web.bind.annotation.RestController;
  7. /**
  8. *
  9. * @ClassName: DemoConsumerController
  10. * @Description:web调用服务提供者对外暴露的rpc接口
  11. * @author: niugang
  12. * @date: 2018年8月18日 上午9:41:30
  13. * @Copyright: 863263957@qq.com. All rights reserved.
  14. *
  15. */
  16. @RestController
  17. public class DemoConsumerController {
  18. /**
  19. * 引入服务提供者
  20. */
  21. @Resource(name = "defaultService")
  22. private DefaultApiService defaultService;
  23. @RequestMapping("/sayHello")
  24. public String sayHello(@RequestParam String name) {
  25. return defaultService.defaultMethod(name);
  26. }
  27. }

5.3applicationContentxt.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:dubbo="http://dubbo.apache.org/schema/dubbo"
  7. xsi:schemaLocation="
  8. http://www.springframework.org/schema/beans
  9. http://www.springframework.org/schema/beans/spring-beans.xsd
  10. http://www.springframework.org/schema/context
  11. http://www.springframework.org/schema/context/spring-context.xsd
  12. http://www.springframework.org/schema/mvc
  13. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  14. <import resource="classpath:consumer.xml" />
  15. <!--組件扫描 -->
  16. <context:component-scan base-package="org.niugang" />
  17. <!--注解扫描 -->
  18. <mvc:annotation-driven />
  19. </beans>

5.4customer.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
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://code.alibabatech.com/schema/dubbo
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
  9. <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
  10. <dubbo:application name="hello-world-customer" />
  11. <dubbo:registry address="redis://localhost:6379"
  12. timeout="30000" check="false" />
  13. <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
  14. <dubbo:reference id="defaultService" interface="org.niugang.service.DefaultApiService" />
  15. </beans>

5.5web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app id="WebApp_ID" version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  5. <!-- 上下文配置文件位置 -->
  6. <context-param>
  7. <param-name>contextConfigLocation</param-name>
  8. <!-- spring 配置文件所在位置,启动 spring 时会去该路径下查找该配置文件 -->
  9. <param-value>classpath*:applicationContext.xml</param-value>
  10. </context-param>
  11. <!-- spring 上下文监听器,初始化启动容器时启动 spring -->
  12. <listener>
  13. <listener-class>org.springframework.web.context.ContextLoaderListener
  14. </listener-class>
  15. </listener>
  16. <!-- spring 核心转发器,拦截指定目录下的请求,分配到配置的拦截路径下处理 -->
  17. <servlet>
  18. <servlet-name>dispatcher</servlet-name>
  19. <servlet-class>org.springframework.web.servlet.DispatcherServlet
  20. </servlet-class>
  21. <init-param>
  22. <param-name>contextConfigLocation</param-name>
  23. <param-value>classpath*:applicationContext.xml</param-value>
  24. </init-param>
  25. <load-on-startup>1</load-on-startup>
  26. </servlet>
  27. <servlet-mapping>
  28. <servlet-name>dispatcher</servlet-name>
  29. <url-pattern>/</url-pattern>
  30. </servlet-mapping>
  31. <!-- spring 编码过滤器 -->
  32. <filter>
  33. <filter-name>characterEncodingFilter</filter-name>
  34. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  35. <init-param>
  36. <param-name>encoding</param-name>
  37. <param-value>UTF-8</param-value>
  38. </init-param>
  39. <init-param>
  40. <param-name>forceEncoding</param-name>
  41. <param-value>true</param-value>
  42. </init-param>
  43. </filter>
  44. <!-- 编码过滤器过滤的路径 -->
  45. <filter-mapping>
  46. <filter-name>characterEncodingFilter</filter-name>
  47. <url-pattern>/*</url-pattern>
  48. </filter-mapping>
  49. </web-app>

以上配置完成。将服务提供者,服务消费分别部署到不同的tomcat中。

启动服务提供者,启动服务消费者。

70 4

70 5

源码地址:

https://gitee.com/niugangxy/dubbo

微信公众号

  1. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L25pdWdhbmcwOTIw_size_16_color_FFFFFF_t_70][]

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读