dubbo-helloword(二)
2024-08-31 04:58:47
项目框架搭建
工程目录创建
entity存放业务实体类
interface存放server接口
concumer是服务消费者(依赖interface和entity)
provider是服务提供者(依赖interface和entity)
concumer和provider是web工程,准备用tomcat容器托管
引入pom依赖
1.master pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <modelVersion>4.0.0</modelVersion> <groupId>com.liqiang</groupId> <artifactId>dubbo-helloword-master</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <junit.version>3.8.1</junit.version> <springframework.version>4.1.6.RELEASE</springframework.version> <commonsLogging.version>1.2</commonsLogging.version> </properties> <modules> <module>dubbo-helloword-provider</module> <module>dubbo-helloword-consumer</module> <module>dubbo-helloword-interface</module> <module>dubbo-helloword-entity</module> </modules> </project>
2.provider pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>dubbo-helloword-master</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-helloword-provider</artifactId> <packaging>war</packaging> <name>dubbo-helloword-provider Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <!-- **************************** Spring 依赖 **************************** --> <!-- 添加Spring-core包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <!--springMVC依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> <type>jar</type> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${springframework.version}</version> </dependency> <!-- 添加spring-tx包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <!-- Spring ORM 相关--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${springframework.version}</version> </dependency> <!-- 添加spring-jdbc包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!--添加spring-web包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <!-- 添加spring-context包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commonsLogging.version}</version> </dependency> <!--添加aspectjweaver包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency> <!-- **************************** /Spring 依赖 **************************** --> <!-- log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <!-- **************************** Dubbo 依赖 **************************** --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> <exclusions> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- **************************** /Dubbo 依赖 **************************** --> <!-- **************************** entity 依赖 **************************** --> <dependency> <artifactId>dubbo-helloword-entity</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /entity 依赖 **************************** --> <!-- **************************** interface 依赖 **************************** --> <dependency> <artifactId>dubbo-helloword-interface</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /interface 依赖 **************************** --> </dependencies> </project>
3.consumer pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>dubbo-helloword-master</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-helloword-consumer</artifactId> <packaging>war</packaging> <name>dubbo-helloword-consumer Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <!-- **************************** Spring 依赖 **************************** --> <!-- 添加Spring-core包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${springframework.version}</version> </dependency> <!--springMVC依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> <type>jar</type> </dependency> <!-- 添加spring-tx包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <!-- Spring ORM 相关--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${springframework.version}</version> </dependency> <!-- 添加spring-jdbc包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <!--添加spring-web包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <!-- 添加spring-context包 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commonsLogging.version}</version> </dependency> <!--添加aspectjweaver包 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.5</version> </dependency> <!-- **************************** /Spring 依赖 **************************** --> <!-- log4j --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <!-- json序列化--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.7.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.1-1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.7.1-1</version> </dependency> <!-- **************************** Dubbo 依赖 **************************** --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.5.3</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.3.3</version> <exclusions> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency> <!-- **************************** /Dubbo 依赖 **************************** --> <!-- **************************** entity 依赖 **************************** --> <dependency> <artifactId>dubbo-helloword-entity</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /entity 依赖 **************************** --> <!-- **************************** interface 依赖 **************************** --> <dependency> <artifactId>dubbo-helloword-interface</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /interface 依赖 **************************** --> </dependencies> </project>
3.interface pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>dubbo-helloword-master</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-helloword-interface</artifactId> <dependencies> <!-- **************************** entity 依赖 **************************** --> <dependency> <artifactId>dubbo-helloword-entity</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </dependency> <!-- **************************** /entity 依赖 **************************** --> </dependencies> </project>
4.entity pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <parent> <artifactId>dubbo-helloword-master</artifactId> <groupId>com.liqiang</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>dubbo-helloword-entity</artifactId> </project>
刷新
5.proverder web.xml增加监听器启动spring容器
<web-app> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-*.xml</param-value> </context-param> <!--配置监听器初始化spring容器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
6.consumer web.xml新增springmvc 的servlet。
<web-app> <display-name>Archetype Created Web Application</display-name> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
发布服务和订阅服务
1.entity创建1个实体类
public class UserEntity implements Serializable { private String name; private int age; 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; } }
2.interface 创建服务接口
public interface UserService { public List<UserEntity> findAll(); }
3.provider发布服务
新增服务实现类
@Service public class UserServiceImpl implements UserService { @Override public List<UserEntity> findAll() { List<UserEntity> userEntitys=new ArrayList<UserEntity>(); UserEntity userEntity=null; //模拟db查询数据 for(int i=0;i<=10;i++){ userEntity=new UserEntity(); userEntity.setName("小明"+i); userEntity.setAge(i+1); userEntitys.add(userEntity); } return userEntitys; } }
增加spring-dubbo.xml和log4j.properties
<!--添加dubbo schema--> <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:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.liqiang.service.impl"></context:component-scan> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="userSystemProvider" /> <!-- 服务注册中心地址 其他参数请看用户指南--> <dubbo:registry address="zookeeper://192.168.65.128:2181?backup=192.168.65.128:2182,192.168.65.128:2183" /> <dubbo:provider delay="-1" timeout="6000" retries="0"/> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!--发布服务--> <dubbo:service interface="com.liqiang.service.UserService" ref="userServiceImpl"></dubbo:service> </beans>
# Control logging for other open source packages #这两句是把这两个包下出现的错误的等级设为ERROR,如果项目中没有配置EHCache,则不需要这两句。 log4j.logger.com.opensymphony.oscache=ERROR log4j.logger.net.sf.navigator=ERROR log4j.logger.net.sf.acegisecurity=WARN log4j.logger.net.sf.acegisecurity.intercept.event.LoggerListener=WARN log4j.logger.org.displaytag=ERROR log4j.logger.org.springframework=WARN # Don't show debug logs for WebTest log4j.logger.com.canoo.webtest=WARN # All hibernate log output of "info" level or higher goes to stdout. # For more verbose logging, change the "info" to "debug" on the last line. log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=WARN # Changing the log level to DEBUG will result in Hibernate generated # SQL to be logged. log4j.logger.org.hibernate.SQL=ERROR # Changing the log level to DEBUG will result in the PreparedStatement # bound variable values to be logged. log4j.logger.org.hibernate.type=ERROR log4j.logger.org.springframework.web.servlet.handler.SimpleMappingExceptionResolver=WARN log4j.rootLogger=info,A1,R log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.Target=System.out log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=[%c]%m%n log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.R.File=../logs/log_.txt log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.Append = true log4j.appender.R.ImmediateFlush = true log4j.appender.R.DatePattern = '.' yyyy - MM - dd '.txt' log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n log4j.logger.com.biz.eisp.api = DEBUG
consumer订阅服务
新增spring-dubbo.xml以及log4配置(与前面想同)
<!--添加dubbo schema--> <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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" 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 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--开启注解扫描--> <context:component-scan base-package="com.liqiang.contorller"></context:component-scan> <mvc:annotation-driven/> <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="userSystem" /> <!-- 服务注册中心地址 其他参数请看用户指南--> <dubbo:registry address="zookeeper://192.168.65.128:2181?backup=192.168.65.128:2182,192.168.65.128:2183" /> <!--订阅服务--> <dubbo:reference interface="com.liqiang.service.UserService" id="userServiceImpl"></dubbo:reference> </beans>
使用服务
@Controller public class UserContorller implements BeanNameAware { @Autowired UserService userService; @RequestMapping(value = "/user", method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) @ResponseBody public List<UserEntity> findAll() { List<UserEntity> userEntities= userService.findAll(); return userEntities; } @Override public void setBeanName(String s) { System.out.println("初始化了"); } }
测试
配置provider和consumer tomcat启动
2个端口改为不一致 provider配置一样
先启动 provider 再启动concumer
dubboadmin 查看服务状态以及对服务治理
消费者调用服务
建议
这是一个简单的demo。dubbo发布服务 以及xml配置还有许多 建议刷一遍用户指南 知道哪些配置有什么效果,根据不同的需求进行不同配置才能达到熟练使用
https://dubbo.gitbooks.io/dubbo-user-book/content/configuration/xml.html
最新文章
- Object.observe将不加入到ES7
- CSUOJ_1002
- Spring 4.0.2 学习笔记(1) - 最基本的注入
- javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation:
- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController)
- java数据结构和算法------插入排序
- 如何脱离SDK,使用DW5.5和phonegap以及JQMobile搭建开发环境
- autocomplete参数说明以及实例
- c语言数组小练习
- Qt之等待提示框三(QLabel进行多图片切换)
- doubango地址配置
- javascript之ProtoBuf在websocket中的使用
- RabbitMQ插件安装
- 【机器学习PAI实践二】人口普查统计
- Linux Debugging(一): 使用反汇编理解C++程序函数调用栈
- 从swap说引用
- Scrapy爬虫学习笔记 - windows \ linux下搭建开发环境1
- U3D的结构体堆分配栈分配
- Centos7永久修改hostname
- 【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信
热门文章
- 解析Qt元对象系统(五) Q_INVOKABLE与invokeMethod(automatic connection从Qt4.8开始的解释已经与之前不同,发送对象驻足于哪一个线程并不重要,起到决定作用的是接收者对象所驻足的线程以及发射信号(该信号与接受者连接)的线程是不是在同一个线程)good
- node.js怎么配置访问本地的html文件?
- JavaScript在表格中模拟搜索多关键词搜索和筛选
- 快速掌握C#7
- javascript跨域的几种方法
- 同域之下子iframe的DOM控制问题
- L4课程_Firebase_笔记分享_StudyJams_2017
- “发布后tomcat中的classes目录为空”问题
- more-less-cat-tail-head 命令简单分析
- python3:语法变动 及新特性