需要本地起一个zookeeper

下载:https://www.apache.org/dyn/closer.cgi/zookeeper/

镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

下载3.4.X的

下载完成解压,进入conf目录,复制一份配置文件并重命名即可:

在bin目录有个启动的

双击启动

建立父工程

打开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 {
@Override
public 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 { @Autowired
private 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日志拦截会输出信息

Dubbo2.6.5入门——简单的HelloWorld的更多相关文章

  1. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  2. 1.1GTK+ 的简单程序HelloWorld

    1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:

  3. React-Native入门指南之HelloWorld

    iOS React-Native入门指南之HelloWorld React-native 作为facebook开源项目,最近是火的一塌糊涂,它采用node.js能够写ios和android的nativ ...

  4. Mybatis_1(认识)一个简单的HelloWorld

    1. 介绍: MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索. MyBatis可以使用简单的XM ...

  5. [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序

    [.NET MVC4 入门系列01]Helloworld MVC 4 第一个MVC4程序   一.练习项目: http://www.asp.net/mvc/tutorials/mvc-4/gettin ...

  6. 简单的HelloWorld

    简单的HelloWorld 步骤: -加入jar包 -在web.xml中配置DispatcherServlet -加入Spring MVC的配置文件 新建文件springmvc.xml: -编写处理请 ...

  7. cocos2d-x 3.0的入门程序:helloworld

    看过了这么多不同方向的应用,发现很多程序入门都是helloworldhelloworld是所有程序员的绝对初恋 先看一下程序的运行结果吧 然后就是他的工程代码 工程的目录有两个 Classes:程序中 ...

  8. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现

    使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这篇文章进行安装和破解 ...

  9. scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld

    scala 入门Eclipse环境搭建及第一个入门经典程序HelloWorld 学习了: http://blog.csdn.net/wangmuming/article/details/3407911 ...

随机推荐

  1. Git:修改Git Bash默认打开位置(win10)

    1.起因 大家写的代码不可能直接保存在根目录下,但是Git Bash每次一打开就是根目录,每次都要切换路径很麻烦. 2.修改Git Bash默认打开位置 1)Git Bash右键 -> 属性 2 ...

  2. 使用 Nexus Repository Manager 搭建 npm 私服

    目录 环境 下载与安装 添加npm仓库 配置与验证npm仓库 发布自己的包 Nexus开启启动 脚注 环境 windows10(1803) Nexus Repository Manager OSS 3 ...

  3. 使用Ajax轮询模拟简单的站内信箱(消息管理)功能

    前一段时间项目需要写一个类似于站内信箱的消息管理的功能,由于对前端不是很熟悉,刚开始不知道怎么做,后来看了网上的方案,现模拟一个非常简单的消息管理. 我们首先看一下最终效果的样式,就是非常简单的一个样 ...

  4. PJSUA2开发文档--第九章 PJSUA2应用程序示例

    9. PJSUA2示例应用程序 9.1 示例应用程序 9.1.1 C++ pjsip-apps/src/samples/pjsua2_demo.cpp 是一个非常简单可用的C++示例应用程序. /* ...

  5. 利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转

    最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台.大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更 ...

  6. 基于DataTables实现根据每个用户动态显示隐藏列,可排序

      前言 在后台管理系统开发中,难免会出现列数太多的情况,这里提供一个解决方案:用户设置显示哪些列,每个用户互不影响,并且可以根据用户的习惯设置列的排序. 1.演示 2.html代码说明 3.java ...

  7. JavaScript 面向对象之原型对象

    原型的概述 我们创建的每个函数都有一个 prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法. 逻辑上可以这么理解:prototype 通过调用构 ...

  8. vue.js 跳转同一页面,传不同值,组件监听路由

    watch: { '$route' () { this.type = this.$route.params.type this.loadData() } },

  9. error C2381: “exit”: 重定义;__declspec(noreturn) 不同

    问题: error C2381: “exit” : 重定义:__declspec(noreturn) 不同 解决办法: 调换一下头文件的包含次序: #include <GL/glut.h> ...

  10. Windows10下安装Oracle 11g 64位的详细步骤

    直接附上我整理后的Word版<Windows10下安装Oracle 11g 64位的详细步骤>下载地址,提取码:9vak. 参考文献: 1.Win10 64位系统下安装Oracle11g详 ...