.idea/algo-java.iml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <module type="JAVA_MODULE" version="4"> <component name="NewModuleRootManager" inherit-compiler-output="true"> <exclude-output /> <content url="file://$MODULE_DIR$" /> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module> .idea/compiler.xml
New file @@ -0,0 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="CompilerConfiguration"> <annotationProcessing> <profile default="true" name="Default" enabled="true" /> <profile name="Maven default annotation processors profile" enabled="true"> <sourceOutputDir name="target/generated-sources/annotations" /> <sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> <outputRelativeToContentRoot value="true" /> <module name="rpc-server" /> <module name="api" /> <module name="web-server" /> <module name="service" /> </profile> </annotationProcessing> </component> <component name="JavacSettings"> <option name="ADDITIONAL_OPTIONS_OVERRIDE"> <module name="rpc-server" options="-parameters" /> <module name="web-server" options="-parameters" /> </option> </component> </project> .idea/encodings.xml
New file @@ -0,0 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="Encoding"> <file url="file://$PROJECT_DIR$/api/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/api/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/rpc-server/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/service/src/main/java" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/service/src/main/resources" charset="UTF-8" /> <file url="file://$PROJECT_DIR$/web-server/src/main/java" charset="UTF-8" /> </component> </project> .idea/jarRepositories.xml
New file @@ -0,0 +1,20 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="RemoteRepositoriesConfiguration"> <remote-repository> <option name="id" value="central" /> <option name="name" value="Maven Central repository" /> <option name="url" value="https://repo1.maven.org/maven2" /> </remote-repository> <remote-repository> <option name="id" value="central" /> <option name="name" value="Central Repository" /> <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" /> </remote-repository> <remote-repository> <option name="id" value="jboss.community" /> <option name="name" value="JBoss Community repository" /> <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> </remote-repository> </component> </project> .idea/misc.xml
@@ -1,4 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="KubernetesApiProvider">{}</component> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="KubernetesApiProvider"><![CDATA[{}]]></component> <component name="MavenProjectsManager"> <option name="originalFiles"> <list> <option value="$PROJECT_DIR$/rpc-server/pom.xml" /> <option value="$PROJECT_DIR$/service/pom.xml" /> <option value="$PROJECT_DIR$/web-server/pom.xml" /> <option value="$PROJECT_DIR$/api/pom.xml" /> </list> </option> </component> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> .idea/modules.xml
New file @@ -0,0 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ProjectModuleManager"> <modules> <module fileurl="file://$PROJECT_DIR$/.idea/algo-java.iml" filepath="$PROJECT_DIR$/.idea/algo-java.iml" /> </modules> </component> </project> .idea/vcs.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="VcsDirectoryMappings"> <mapping directory="" vcs="Git" /> </component> </project> README.md
@@ -1,64 +1,7 @@ ## 介绍 Dubbo是一款高性能、轻量级的开源Java RPC(Remote Procedure Call,远程过程调用)框架,它提供了分布式系统中服务之间的高效、透明化的服务调用方案。Dubbo最初由阿里巴巴公司开发并开源,现已成为Apache顶级项目。 ## 架构演变 在了解dubbo之后,我们要知道dubbo在当今互联网架构中在什么样的位置,我们先来看一个架构演进图  而了解过feign的同学这里就可以拿它和dubbo对比,在上面的图中,feign就是在微服务架构承担rpc框架,而dubbo就在在上面的SOA((Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。)架构中承担rpc框架的角色。 SOA架构,就像是大部门制,一个部门管的事儿比较多,几个相关的工作一块儿干,这样大家协作起来方便,但是部门和部门之间还是得互相配合,有时候沟通多了就复杂了。而且,这种模式下,大家用的工具和流程尽量统一,为了好配合。 微服务架构呢,就像是小团队制,每个小团队就专攻一件事,特别专注,自己管自己那一块,出了问题也不容易影响别人。这种模式灵活多了,每个小团队还能根据自己的喜好选最好的工具干活,更新换代快。不过,这么多小团队,怎么让它们高效合作,也得好好设计一套规则。 ## DUBBO 说了这么多,其实dubbo的精髓就是**把自己的api暴露出去给大家,具体的实现继承自己的api去写实现方法。** 但是feign就可以完全脱离api提供,可以提供一个restful的http接口,然后其他服务可以直接通过feign进行调用,这也导致了feign的耦合度更低,但是feign在实际开发过程中也可以模仿dubbo暴露api的方式进行架构的搭建。 之前我们快速演示一下了dubbo,[每天一个新知识之 SpringBoot+Dubbo 的快速入门](https://blog.csdn.net/csdnerM/article/details/125410232) 要使用dubbo首先要搭建一个注册中心,注册中心的目的就是为了让其他的服务调用dubbo服务,在dubbo官方,推荐使用Zookeeper作为注册中心。 [公司居然还在用zookeeper,吓得我马上学习了相关命令!](https://juejin.cn/post/7376930488738938920) [Linux安装Zookeeper(图文解说详细版)](https://masiyi.blog.csdn.net/article/details/121848173) >  虽然之前也写过一篇dubbo的快速入门,但是写的简单,时隔两年,这次介绍一些Dubbo的高级特性。 ## 框架 我们先从框架的搭建说起  这次我们一共建了四个单独的模块,他们没有共同的父模块,但是他们之间有依赖关系,他们之间的关系是这样的:  在service模块中引入了Dubbo的jar包,这样,一套整体的dubbo模块框架就出来了 ``` <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> ``` 他们的作用分别是: 本项目技术站: jdk8 + springboot + dubbo + mysql + redis + zookeeper api模块提供最基础的实体类,枚举类等,最重要是需要暴露出去的抽象接口。 @@ -68,206 +11,9 @@ web-server则是主要提供http接口给第三方,如前端调用,也可以引入其他项目的api模块,之后只要有生产者注入到注册中心就可以提供服务了,直接调用api里面的抽象接口方法。 说这么多,我们来看里面的具体实现代码,由于篇幅问题,请移至代码仓库查看代码: 中科大的老师,负责再service模块里写算法即可 [https://gitee.com/wangfugui-ma/springboot-dubbo/tree/dubbo/](https://gitee.com/wangfugui-ma/springboot-dubbo/tree/dubbo/) 那么,dubbo是需要搭配zookeeper去使用,由于上一篇文章已经讲过了,这里就不再赘述。我们怎么去使用dubbo的一些高级特性呢 ## 高级特性 ### 序列化 由于我们的实体类是写在api里面的,而api又是供各个项目去引用的,所以如果我们要在其他的项目中获取这个类,例如在这个项目中的queryUser方法中。 ```java package com.zy.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.zy.entity.User; import com.zy.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Reference//远程注入 private UserService userService; @GetMapping("/user") public String user() { User user = userService.queryUser(); return user.toString(); } } ``` 我们的User对象必须实现Serializable接口,例如这样 ```java package com.zy.entity; import java.io.Serializable; public class User implements Serializable { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` ### 超时 #### 生产者超时 如果我们的生产者需要设置一个超时时间,我们可以在提供方的Service注解中加入timeout属性,就像这样: ```java package com.zy.support; import com.alibaba.dubbo.config.annotation.Service; import com.zy.entity.User; import com.zy.service.UserService; import org.springframework.stereotype.Component; @Service(timeout = 3000) @Component public class UserServiceSupport implements UserService { /** * 查询user */ @Override public User queryUser() { try { Thread.sleep(5000); } catch (InterruptedException e) { throw new RuntimeException(e); } User user = new User(); user.setAge(18); user.setName("王富贵"); return user; } } ``` 这样当我们的controller接口调用超过3秒的时候就会报错: ``` com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout. start time: 2024-06-15 21:24:14.504, end time: 2024-06-15 21:24:17.511, client elapsed: 1 ms, server elapsed: 3006 ms, timeout: 3000 ms, request: Request [id=2, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=queryUser, parameterTypes=[], arguments=[], attachments={path=com.zy.service.UserService, interface=com.zy.service.UserService, version=0.0.0, timeout=3000}]], channel: /10.8.0.136:8061 -> /10.8.0.136:20885 ``` 这样我们就从生产方加入了超时控制 #### 消费者超时 其实我们也可以从消费者这边控制超时时间,就像这样: ``` package com.zy.controller; import com.alibaba.dubbo.config.annotation.Reference; import com.zy.entity.User; import com.zy.service.UserService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Reference(timeout = 1000)//远程注入 private UserService userService; @GetMapping("/user") public String user() { User user = userService.queryUser(); return user.toString(); } } ``` 在Reference注解中加入timeout属性也是可以达到一样的效果: ``` com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout. start time: 2024-06-15 21:25:25.398, end time: 2024-06-15 21:25:26.399, client elapsed: 0 ms, server elapsed: 1001 ms, timeout: 1000 ms, request: Request [id=2, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=queryUser, parameterTypes=[], arguments=[], attachments={path=com.zy.service.UserService, interface=com.zy.service.UserService, version=0.0.0, timeout=1000}]], channel: /10.8.0.136:8570 -> /10.8.0.136:20885 ``` ### @Autowired 除了使用@Reference注解注入dubbo服务外,还可以使用@Autowired去注入dubbo服务  ### 配置文件 ``` dubbo.application.name=web-server dubbo.registry.address=zookeeper://127.0.0.1:2181 ``` 在配置文件中写上最基础的两个配置,dubbo.registry.address可以不带zookeeper前缀,但是要加个配置key ``` # 如果不加这个,就需要在address里面加zookeeper:// dubbo.registry.protocol=zookeeper ``` 注意这个配置: ``` dubbo.protocol.port=20885 ``` dubbo默认用20880端口,如果你需要在一个服务器上面启动多个dubbo服务,那就不能让他们的端口冲突 ``` dubbo.registry.password=zk_password dubbo.registry.username=zk_user ``` 如果你的节点有acl权限,则可能需要加上这两个配置,替换value 如果你还不知道acl权限是什么,推荐你看一下这篇文章 [公司居然还在用zookeeper,吓得我马上学习了相关命令!](https://juejin.cn/post/7376930488738938920) ### @EnableDubbo 记得在启动类开启这个注解,否则不能使用dubbo的相关服务,你懂的。。。。 >  1.service已经集成了redis和mysql也都有示例 2.api模块里只要写接口,供第三方系统使用 3. api/pom.xml
@@ -12,6 +12,81 @@ <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dubbo.version>2.7.8</dubbo.version> <curator.version>4.2.0</curator.version> <curator-recipes.version>2.8.0</curator-recipes.version> <zookeeper.version>3.6.3</zookeeper.version> </properties> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- zookeeper注册中心 需要导入zookeeper依赖 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> <!-- 提示与zookeeper中的slf4j-log4j12-1.7.29.jar 包冲突--> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <!-- Zookeeper 客户端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator-recipes.version}</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.5.12</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> <scope>provided</scope> </dependency> </dependencies> </project> api/src/main/java/com/zy/entity/User.java
@@ -1,32 +1,25 @@ package com.zy.entity; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import java.io.Serializable; @Data @TableName("sys_user") public class User implements Serializable { private String name; private Integer age; public String getName() { return name; } private String username; public void setName(String name) { this.name = name; } /** * 密码 */ private String password; public Integer getAge() { return age; } /** * 昵称 */ private String nickname; public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } api/src/main/java/com/zy/service/UserService.java
@@ -2,6 +2,8 @@ import com.zy.entity.User; import java.util.List; //todo 这里写一个自定义注解,之后通过自定义注解来获取该接口和实现类将其注册到注册中心 public interface UserService { @@ -9,4 +11,10 @@ * 查询user */ public User queryUser(); void add(String key, String value); String get(String key); List<User> getDataByMySql(); } rpc-server/src/main/resources/application.properties
File was deleted rpc-server/src/main/resources/application.yml
New file @@ -0,0 +1,84 @@ spring: application: name: rpc-server mvc: static-path-pattern: /** datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/jbly?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: xltys1995 type: com.alibaba.druid.pool.DruidDataSource druid: initial-size: 5 min-idle: 5 max-active: 20 max-wait: 30000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 test-while-idle: true test-on-borrow: true test-on-return: false remove-abandoned: true remove-abandoned-timeout: 1800 #pool-prepared-statements: false #max-pool-prepared-statement-per-connection-size: 20 filters: stat, wall validation-query: SELECT 'x' aop-patterns: com.zy.*.*.service.* stat-view-servlet: url-pattern: /druid/* reset-enable: true login-username: admin login-password: admin enabled: true servlet: multipart: maxFileSize: 100MB maxRequestSize: 100MB jmx: enabled: false redis: host: localhost password: xltys1995 port: 6379 max: 30 min: 10 timeout: 5000 index: 3 server: port: 8082 dubbo: application: name: rpc-server registry: address: zookeeper://127.0.0.1:2181 # protocol: zookeeper # password: dreamtech # username: zk_user protocol: name: dubbo port: 20880 monitor: protocol: registry mybatis-plus: mapper-locations: classpath:mapper/*/*.xml # global-config: # field-strategy: 0 configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true global-config: :banner: false db-config: id-type: auto logic-delete-value: 1 logic-not-delete-value: 0 rpc-server/target/classes/application.properties
File was deleted rpc-server/target/classes/application.yml
New file @@ -0,0 +1,84 @@ spring: application: name: rpc-server mvc: static-path-pattern: /** datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/jbly?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: xltys1995 type: com.alibaba.druid.pool.DruidDataSource druid: initial-size: 5 min-idle: 5 max-active: 20 max-wait: 30000 time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 test-while-idle: true test-on-borrow: true test-on-return: false remove-abandoned: true remove-abandoned-timeout: 1800 #pool-prepared-statements: false #max-pool-prepared-statement-per-connection-size: 20 filters: stat, wall validation-query: SELECT 'x' aop-patterns: com.zy.*.*.service.* stat-view-servlet: url-pattern: /druid/* reset-enable: true login-username: admin login-password: admin enabled: true servlet: multipart: maxFileSize: 100MB maxRequestSize: 100MB jmx: enabled: false redis: host: localhost password: xltys1995 port: 6379 max: 30 min: 10 timeout: 5000 index: 3 server: port: 8082 dubbo: application: name: rpc-server registry: address: zookeeper://127.0.0.1:2181 # protocol: zookeeper # password: dreamtech # username: zk_user protocol: name: dubbo port: 20880 monitor: protocol: registry mybatis-plus: mapper-locations: classpath:mapper/*/*.xml # global-config: # field-strategy: 0 configuration: # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true cache-enabled: true global-config: :banner: false db-config: id-type: auto logic-delete-value: 1 logic-not-delete-value: 0 service/pom.xml
@@ -12,65 +12,49 @@ <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <dubbo.version>2.7.8</dubbo.version> <curator.version>4.2.0</curator.version> <curator-recipes.version>2.8.0</curator-recipes.version> <zookeeper.version>3.6.3</zookeeper.version> </properties> <dependencies> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.8</version> </dependency> <!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- zookeeper注册中心 需要导入zookeeper依赖 --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> <!-- 提示与zookeeper中的slf4j-log4j12-1.7.29.jar 包冲突--> <!--排除这个slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <!-- Zookeeper 客户端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator-recipes.version}</version> </dependency> <dependency> <groupId>com.zy</groupId> <artifactId>api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- 集成redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.0.3.RELEASE</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> </dependencies> </project> service/src/main/java/com/zy/mapper/UserMapper.java
New file @@ -0,0 +1,13 @@ package com.zy.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zy.entity.User; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @Mapper @Repository public interface UserMapper extends BaseMapper<User> { } service/src/main/java/com/zy/support/UserServiceSupport.java
@@ -1,26 +1,49 @@ package com.zy.support; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.zy.entity.User; import com.zy.mapper.UserMapper; import com.zy.service.UserService; import org.apache.dubbo.config.annotation.DubboService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import java.util.List; @DubboService // 该注解用于将当前类对象存入spring容器中,既可以本项目服务使用,父接口注解能力也可以提供给其他项目使用 public class UserServiceSupport implements UserService { @Autowired private RedisTemplate<String, String> redisTemplate; @Autowired private UserMapper userMapper; /** * 查询user */ @Override public User queryUser() { // try { // Thread.sleep(5000); // } catch (InterruptedException e) { // throw new RuntimeException(e); // } User user = new User(); user.setAge(18); user.setName("张三"); user.setNickname("1212"); user.setUsername("张三"); return user; } @Override public void add(String key, String value) { redisTemplate.opsForValue().set(key, value); } @Override public String get(String key) { return redisTemplate.opsForValue().get(key); } @Override public List<User> getDataByMySql() { List<User> users = userMapper.selectList(new QueryWrapper<>()); return users; } } service/src/main/resources/mapper/system/UserMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.mapper.UserMapper"> </mapper> service/target/classes/mapper/system/UserMapper.xml
New file @@ -0,0 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zy.mapper.UserMapper"> </mapper> web-server/pom.xml
@@ -33,7 +33,7 @@ <dependency> <groupId>com.zy</groupId> <artifactId>service</artifactId> <artifactId>api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> web-server/src/main/java/com/zy/controller/UserController.java
@@ -5,12 +5,15 @@ import com.zy.service.UserService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class UserController { @DubboReference(timeout = 1000)//远程注入 @DubboReference(timeout = 1000, check = false)//远程注入 private UserService userService; @@ -19,4 +22,21 @@ User user = userService.queryUser(); return user.toString(); } @GetMapping("/get") public String get() { return userService.get("user"); } @GetMapping("/add") public String add() { userService.add("user", "123"); return "ok"; } @GetMapping("/user3") public List<User> user3() { return userService.getDataByMySql(); } } web-server/src/main/resources/application.properties
File was deleted web-server/src/main/resources/application.yml
New file @@ -0,0 +1,19 @@ spring: application: name: web-server server: port: 8083 dubbo: protocol: name: dubbo port: 20885 application: name: web-server registry: address: zookeeper://127.0.0.1:2181 # password: dreamtech # username: zk_user monitor: protocol: registry web-server/target/classes/application.yml
New file @@ -0,0 +1,19 @@ spring: application: name: web-server server: port: 8083 dubbo: protocol: name: dubbo port: 20885 application: name: web-server registry: address: zookeeper://127.0.0.1:2181 # password: dreamtech # username: zk_user monitor: protocol: registry