{"id":15654682,"url":"https://github.com/v5tech/dubbo-example","last_synced_at":"2025-05-01T04:29:49.551Z","repository":{"id":35964891,"uuid":"40255236","full_name":"v5tech/dubbo-example","owner":"v5tech","description":"dubbo example","archived":false,"fork":false,"pushed_at":"2016-05-02T04:50:15.000Z","size":17613,"stargazers_count":26,"open_issues_count":0,"forks_count":21,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-30T21:04:23.005Z","etag":null,"topics":["dubbo","dubbo-example"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/v5tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-08-05T16:07:30.000Z","updated_at":"2023-12-19T02:44:06.000Z","dependencies_parsed_at":"2022-09-14T02:41:17.323Z","dependency_job_id":null,"html_url":"https://github.com/v5tech/dubbo-example","commit_stats":null,"previous_names":["v5tech/dubbo-example","ameizi/dubbo-example"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v5tech%2Fdubbo-example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v5tech%2Fdubbo-example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v5tech%2Fdubbo-example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/v5tech%2Fdubbo-example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/v5tech","download_url":"https://codeload.github.com/v5tech/dubbo-example/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251823702,"owners_count":21649737,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dubbo","dubbo-example"],"created_at":"2024-10-03T12:53:20.348Z","updated_at":"2025-05-01T04:29:49.496Z","avatar_url":"https://github.com/v5tech.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# dubbo-example\n\ndubbo 分布式服务配置案例\n\n升级到dubbox 2.8.4\n\ndubbox 2.8.4编译安装\n\n```\nhttps://github.com/dangdangdotcom/dubbox/archive/dubbox-2.8.4.zip\n修改根pom中curator_version版本为\u003ccurator_version\u003e2.6.0\u003c/curator_version\u003e\nmvn install -Dmaven.test.skip=true\n```\n\n### 1. 项目结构介绍\n\ndubbo-service 公共接口服务\n\ndubbo-provider 公共接口服务实现(dubbo provider) 服务提供者\n\ndubbo-consumer (dubbo consumer) dubbo服务消费者\n\n### 2. 具体描述\n\n* dubbo-service 为公共服务接口，在该模块中只声明对外提供的接口,在dubbo provider和 dubbo consumer均有引用\n\n* dubbo-provider 公共接口服务实现,服务提供者.为dubbo consumer提供服务。\n\n* 示例代码如下\n\n```java\nimport net.aimeizi.dubbo.entity.User;\nimport net.aimeizi.dubbo.service.UserService;\n\nimport com.alibaba.dubbo.config.annotation.Service;\n\n@Service\npublic class UserServiceImpl implements UserService {\n\n\t@Override\n\tpublic User save(User user) {\n\t\tuser.setUserId(++UserIdGenerator.id);\n\t\treturn user;\n\t}\n\n}\n```\n* dubbo provider 核心配置\n\n```xml\n\u003c!-- 提供方应用信息，用于计算依赖关系 --\u003e\n\u003cdubbo:application name=\"dubbo-provider\" /\u003e\n\u003c!-- 使用zookeeper注册中心暴露服务地址 --\u003e\n\u003cdubbo:registry address=\"zookeeper://127.0.0.1:2181\" /\u003e\n\u003c!-- 用dubbo协议在20880端口暴露服务 --\u003e\n\u003cdubbo:protocol name=\"dubbo\" port=\"20880\" /\u003e\n\u003c!-- 扫描注解包路径，多个包用逗号分隔，不填pacakge表示扫描当前ApplicationContext中所有的类 --\u003e\n\u003cdubbo:annotation package=\"net.aimeizi.dubbo.service\"/\u003e\n```\n注:`\u003cdubbo:annotation package=\"net.aimeizi.dubbo.service\"/\u003e`配置会扫描该包下的@Service(com.alibaba.dubbo.config.annotation.Service)注解. 这里的服务注入使用dubbo @Service注解\n\n* maven依赖\n\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003enet.aimeizi\u003c/groupId\u003e\n    \u003cartifactId\u003edubbo-service\u003c/artifactId\u003e\n    \u003cversion\u003e1.0-SNAPSHOT\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n    \u003cartifactId\u003espring-context\u003c/artifactId\u003e\n    \u003cversion\u003e${spring.version}\u003c/version\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.alibaba\u003c/groupId\u003e\n    \u003cartifactId\u003edubbo\u003c/artifactId\u003e\n    \u003cversion\u003e2.8.4\u003c/version\u003e\n    \u003cexclusions\u003e\n\t\u003cexclusion\u003e\n\t    \u003cartifactId\u003espring\u003c/artifactId\u003e\n\t    \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n\t\u003c/exclusion\u003e\n    \u003c/exclusions\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eorg.apache.zookeeper\u003c/groupId\u003e\n    \u003cartifactId\u003ezookeeper\u003c/artifactId\u003e\n    \u003cversion\u003e3.4.6\u003c/version\u003e\n    \u003cexclusions\u003e\n\t\u003cexclusion\u003e\n\t    \u003cgroupId\u003ecom.sun.jmx\u003c/groupId\u003e\n\t    \u003cartifactId\u003ejmxri\u003c/artifactId\u003e\n\t\u003c/exclusion\u003e\n\t\u003cexclusion\u003e\n\t    \u003cgroupId\u003ecom.sun.jdmk\u003c/groupId\u003e\n\t    \u003cartifactId\u003ejmxtools\u003c/artifactId\u003e\n\t\u003c/exclusion\u003e\n\t\u003cexclusion\u003e\n\t    \u003cgroupId\u003ejavax.jms\u003c/groupId\u003e\n\t    \u003cartifactId\u003ejms\u003c/artifactId\u003e\n\t\u003c/exclusion\u003e\n    \u003c/exclusions\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.sgroschupf\u003c/groupId\u003e\n    \u003cartifactId\u003ezkclient\u003c/artifactId\u003e\n    \u003cversion\u003e0.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n* dubbo-consumer 消费者.这里只依赖公共服务接口，不需要直接依赖dubbo provider\n\n* 示例代码如下\n\n```java\nimport com.alibaba.dubbo.config.annotation.Reference;\nimport net.aimeizi.dubbo.service.DemoService;\nimport net.aimeizi.dubbo.service.UserService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\n\nimport javax.annotation.Resource;\n\n/**\n *\n * dubbo 消费者\n *\n * @Reference 注解需要在 dubbo consumer中做如下配置\n *\n * \u003cdubbo:annotation/\u003e\n *\t\u003ccontext:component-scan base-package=\"net.aimeizi.dubbo.controller\"\u003e\n *\t\u003ccontext:include-filter type=\"annotation\" expression=\"com.alibaba.dubbo.config.annotation.Reference\"/\u003e\n * \u003c/context:component-scan\u003e\n *\n * 若要使用@Autowired或@Resource注解需要显式声明bean\n *\n * 使用@Autowired或@Resource注解时需要使用dubbo:reference来声明\n * \u003cdubbo:reference interface=\"net.aimeizi.dubbo.service.UserService\" id=\"userService\"/\u003e\n * \u003cdubbo:reference interface=\"net.aimeizi.dubbo.service.DemoService\" id=\"demoService\"/\u003e\n *\n * 以上的配置均需要在spring mvc的DispatcherServlet配置中显式配置dubbo consumer的配置.如/WEB-INF/applicationContext-dubbo-consumer.xml 否则在Controller中服务报NullPointException\n * \u003cservlet\u003e\n *\t\u003cservlet-name\u003emvc-dispatcher\u003c/servlet-name\u003e\n *\t\t\u003cservlet-class\u003eorg.springframework.web.servlet.DispatcherServlet\u003c/servlet-class\u003e\n *\t\u003cinit-param\u003e\n *\t\u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n *\t\t\u003cparam-value\u003e/WEB-INF/applicationContext*.xml,/WEB-INF/mvc-dispatcher-servlet.xml\u003c/param-value\u003e\n *\t\u003c/init-param\u003e\n *\t\u003cload-on-startup\u003e1\u003c/load-on-startup\u003e\n * \u003c/servlet\u003e\n *\n */\n@Controller\npublic class HelloController {\n\n\t@Reference\n\t//@Autowired\n\t//@Resource\n\tprivate DemoService demoService;\n\n\t@Reference\n\t//@Autowired\n\t//@Resource\n\tprivate UserService userService;\n\n\t@RequestMapping(value = \"/test\", method = RequestMethod.GET)\n\tpublic String printWelcome(ModelMap model) {\n\t\tmodel.addAttribute(\"message\", \"Hello world!\");\n\t\treturn \"hello\";\n\t}\n}\n```\n\n注意:\n\n① @Reference 注解需要在 dubbo consumer配置文件中做如下配置\n```xml\n\u003cdubbo:annotation/\u003e\n\u003ccontext:component-scan base-package=\"net.aimeizi.dubbo.controller\"\u003e\n\t\u003ccontext:include-filter type=\"annotation\" expression=\"com.alibaba.dubbo.config.annotation.Reference\"/\u003e\n\u003c/context:component-scan\u003e\n```\n\n② 若要使用@Autowired或@Resource注解需要显式声明bean\n\n```xml\n\u003c!-- 使用@Resource注解时需要使用dubbo:reference来声明 --\u003e\n\u003cdubbo:reference interface=\"net.aimeizi.dubbo.service.UserService\" id=\"userService\"/\u003e\n\u003cdubbo:reference interface=\"net.aimeizi.dubbo.service.DemoService\" id=\"demoService\"/\u003e\n```\n\n③ 以上的配置均需要在spring mvc的DispatcherServlet配置中显式配置dubbo consumer的配置.如/WEB-INF/applicationContext-dubbo-consumer.xml 否则在Controller中服务报NullPointException\n\n```xml\n\u003cservlet\u003e\n\t\u003cservlet-name\u003emvc-dispatcher\u003c/servlet-name\u003e\n\t\u003cservlet-class\u003eorg.springframework.web.servlet.DispatcherServlet\u003c/servlet-class\u003e\n\t\u003cinit-param\u003e\n\t\t\u003cparam-name\u003econtextConfigLocation\u003c/param-name\u003e\n\t\t\u003cparam-value\u003e/WEB-INF/applicationContext*.xml,/WEB-INF/mvc-dispatcher-servlet.xml\u003c/param-value\u003e\n\t\u003c/init-param\u003e\n\t\u003cload-on-startup\u003e1\u003c/load-on-startup\u003e\n\u003c/servlet\u003e\n```\n\n### 3. 演示\n\n完整演示\n\n![](Screenshots/1.gif)\n\n错误演示Controller中服务报NullPointException\n\n![](Screenshots/2.gif)\n\n使用@Autowired或@Resource注解\n\n![](Screenshots/3.gif)\n\ndubbo管理控制台演示\n\n![](Screenshots/dubbo.gif)\n\n\n# 与我联系\n\n* QQ:*184675420*\n\n* Email:*sxyx2008#gmail.com*(#替换为@)\n\n* HomePage:*[aimeizi.net](http://aimeizi.net)*\n\n* Weibo:*[http://weibo.com/qq184675420](http://weibo.com/qq184675420)*(荧星诉语)\n\n* Twitter:*[https://twitter.com/sxyx2008](https://twitter.com/sxyx2008)*\n\n\n# License\n\nMIT\n\nCopyright (c) 2015 雪山飞鹄","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv5tech%2Fdubbo-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fv5tech%2Fdubbo-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv5tech%2Fdubbo-example/lists"}