Dubbo2.6.5入门——简单的HelloWorld
建立父工程
打开idea,新建一个空的maven工程,作为整个项目的父工程。
<?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.demo</groupId><artifactId>dubbo-parent</artifactId><version>1.0-SNAPSHOT</version><modules><module>dubbo-api</module><module>dubbo-service</module><module>dubbo-consumer</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>com.alibaba.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>0.2.1-SNAPSHOT</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.6.5</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.2</version></dependency><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>2.13.0</version></dependency><!--<dependency>--><!--<groupId>org.apache.curator</groupId>--><!--<artifactId>curator-client</artifactId>--><!--<version>2.13.0</version>--><!--</dependency>--><!--<dependency>--><!--<groupId>org.apache.curator</groupId>--><!--<artifactId>curator-recipes</artifactId>--><!--<version>2.13.0</version>--><!--</dependency>--><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId></dependency></dependencies><repositories><repository><id>sonatype-nexus-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories> </project>
然后建立公共模块
..
..
完成之后在src/main/java目录下新建一个服务接口
内容:
package com.demo.common.service;public interface DemoService {String hello(); }
目录:
建立dubbo服务子模块
..
..
..
这个时候呢,Springboot的父工程不是我们建立的那个,所以要改一下parent,还需要加入公共模块的依赖
<?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><parent><groupId>com.demo</groupId><artifactId>dubbo-parent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo-service</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-service</name><description>dubbo服务</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.demo</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
下面写一个简单的dubbo服务,在与SpringBoot启动类同级目录下建立service包,里面有服务接口的实现
..服务接口实现
package com.demo.dubboservice.service.impl;import com.alibaba.dubbo.config.annotation.Service; import com.demo.common.service.DemoService;/*** 建议由服务提供方设置超时,在 Provider 上尽量多配置 Consumer 端属性* timeout 方法调用超时* retries 失败重试次数,缺省是 2 [2]* loadbalance 负载均衡算法 [3],缺省是随机 random。还可以有轮询 roundrobin、最不活跃优先 [4] leastactive 等* actives 消费者端,最大并发调用限制,即当 Consumer 对一个服务的并发调用到上限后,新调用会阻塞直到超时*/ @Service(registry = "dubboRegistry", timeout = 3000, version = "1.0", retries = 3, loadbalance = "random", actives = 5) public class DemoServiceImpl implements DemoService {@Overridepublic String hello() {return "动物园里有大西几! 小凶许! 小脑斧! 梅发怒! 小福泥! 小海疼! 发福蝶! 大鸡居! 大飞囊! 大lai流! 强颈怒! 大蟒鞋! 小白去! 鸵寮! 大带许! 大穷猫! 大诺坨! 大你鱼! 丹鼎货! 小乌堆!";} }
..然后修改application.properties
spring.application.name=dubbo-service server.port=9999# 应用名 dubbo.application.id=service-provider dubbo.application.name=service-provider# 扫描dubbo服务(@Service.. @Reference..) dubbo.scan.basePackages=com.demo.dubboservice.service# 通信协议 dubbo.protocol.id = dubbo dubbo.protocol.name = dubbo dubbo.protocol.port = 20880# 注册中心 dubbo.registry.id = dubboRegistry dubbo.registry.timeout=5000 dubbo.registry.address = 127.0.0.1:2181 dubbo.registry.client = curator dubbo.registry.protocol=zookeeper
建立服务消费者子模块
..
..
..
同样,也需要更改parent并加入公共模块依赖
<?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><parent><groupId>com.demo</groupId><artifactId>dubbo-parent</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo-consumer</artifactId><version>0.0.1-SNAPSHOT</version><name>dubbo-consumer</name><description>dubbo消费者</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.demo</groupId><artifactId>dubbo-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
在Springboot启动类的同级目录下建立,controller
Controller
package com.demo.dubboconsumer.controller;import com.alibaba.dubbo.config.annotation.Reference; import com.demo.common.service.DemoService; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class DemoController {@Reference(version = "1.0")private DemoService demoService;@RequestMapping("/hello")public String hello(){return demoService.hello();}}
application.properties
spring.application.name=dubbo-service server.port=9990# 应用名 dubbo.application.id=service-consumer dubbo.application.name=service-consumer# 扫描dubbo服务(@Service.. @Reference..) dubbo.scan.basePackages=com.demo.dubboconsumer.controller# 通信协议 dubbo.protocol.id = dubbo dubbo.protocol.name = dubbo dubbo.protocol.port = 20880# 注册中心 dubbo.registry.id = dubboRegistry dubbo.registry.timeout=5000 dubbo.registry.address = 127.0.0.1:2181 dubbo.registry.client = curator dubbo.registry.protocol=zookeeper
还有一个日志类,这个没有也行,我自己写着玩的
package com.demo.dubboconsumer.utils;import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;/*** AOP 日志*/ @Aspect @Component @Slf4j public class MonitorAOP {@Autowiredprivate HttpServletRequest request;@Pointcut("execution(* com.demo.dubboconsumer.controller..*.*(..))")public void aspect(){}@Around("aspect()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis();Object result = joinPoint.proceed();long end = System.currentTimeMillis();log.info(joinPoint + "|Time-Consuming:" + (end-start) + "|" + request.getRequestURI());return result;}@AfterThrowing(value = "aspect()", throwing = "e")public void afterException(JoinPoint joinPoint, Exception e){} }
首先启动服务提供者
然后启动消费者
然后呢,我前面写了一个管控台的,不清楚请看这里,现在看 http://localhost:8080/#/。
点击Detail
可以看到消费者信息。
下面我们访问一下接口 http://localhost:9990/hello
访问的话我写的AOP日志拦截会输出信息
转载于:https://www.cnblogs.com/LUA123/p/10288979.html
Dubbo2.6.5入门——简单的HelloWorld相关推荐
- 【Java学习】从一个简单的HelloWorld项目中入门maven
创建一个maven项目 这里推荐官方文档:maven官方文档 [注]此篇文章也是笔者学习笔记,如有错误,请见谅. [注]我把Goal翻译成命令.比如Plugin Goal: ps:我他喵的写了一大半的 ...
- java jni helloword_JNI入门教程之HelloWorld篇
JNI入门教程之HelloWorld篇 来源:互联网 宽屏版 评论 2008-05-31 09:07:11 本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第 ...
- JNI入门学程之HelloWorld篇
如果你对Jni不甚懂得,不晓得Jni是作什么的,如何树立一个基础的jni程序,或允许以参考下面下面这些文章: 应用VC++6.0实现JNI的最简单的例子 JNI入门学程之HelloWorld篇 SUN ...
- Makefile入门一、helloworld
Makefile入门一.helloworld 1.了解gcc从源码到可执行文件的步骤 2.Makefile的helloworld 3.提到Makefile不得不了解gcc命令 1.了解gcc从源码到可 ...
- 1.1GTK+ 的简单程序HelloWorld
1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:
- linux平台 一个简单的helloworld动态库的制作与使用
编写一个简单的动态库并调用. 动态库代码: HelloWorld.c /*** 简单动态库文件使用*/ #include "HelloWorld.h"void hello(void ...
- storm入门——本地模式helloworld
创建maven项目,在pom.xml中加入以下配置: <dependency><groupId>org.apache.storm</groupId><arti ...
- JMeter压测入门简单使用
JMeter压测入门简单使用. 下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.2. ...
- 01.最简单的helloworld
最简单的helloworld,就是直接在主函数中利用输出 package com.nodrich.helloworld; public class helloworld01 { public ...
最新文章
- ESLint问题记录
- 【论文】ICLR 2020 九篇满分论文!!!
- jsp页面传递参数是如何与javabean进行关联的
- DJango操作MySQL数据库
- java 图片动画_java在窗口中添加图片做动画,怎么一闪一闪的?
- Caffe学习系列(9):运行caffe自带的两个简单例子
- 数学实验matlab课后习题答案,matlab数学实验教程答案
- draw python_科学网—Draw figures with Python - 高琳琳的博文
- 服务器linux启动,Linux 服务器环境启动
- 10-08 长假结束
- Lesson 73-74 The quality of our lives
- 【回归预测】基于matlab鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 1554期】
- wordpress如何获得当前用户的头像
- Orcad 使用MySQL数据库建立元件数据库完整步骤(30多张截图)
- 计算机组成原理00h,计算机组成原理 (2).doc
- 在阿里云上搭建自己的虚拟机(学习笔记)
- c语言键盘函数key,c语言获得键盘的按键
- 数学表达式基础——1 基本符号与术语
- android来电电话获取,Android获取来电号码代码
- 计算机组成原理实验tec2000,TEC-2000A计算机组成原理实验系统