栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

dubbo实战之三:使用Zookeeper注册中心,java后端工程师面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

dubbo实战之三:使用Zookeeper注册中心,java后端工程师面试题

package com.bolingcavalry.springbootzkprovider;

import com.bolingcavalry.dubbopractice.service.DemoService;

import lombok.extern.slf4j.Slf4j;

import org.apache.dubbo.config.annotation.Service;

import org.apache.dubbo.rpc.RpcContext;

@Slf4j

@Service

public class DemoServiceImpl implements DemoService {

@Override

public String sayHello(String name) {

log.info("I’m springboot-zk-provider, Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

return "I’m springboot-zk-provider, Hello " + name + ", response from provider: " + RpcContext.getContext().getLocalAddress();

}

}

  1. 编写SpringBoot启动类SpringBootZKProviderApplication.java,注意要添加@EnableDubbo注解:

package com.bolingcavalry.springbootzkprovider;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubbo

public class SpringBootZKProviderApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootZKProviderApplication.class, args);

}

}

  1. 至此服务提供方编码完成,直接在IDEA上运行SpringBootZKProviderApplication类即可启动服务,启动成功后的日志输出如下图,如红框所示,已连上了Zookeeper:

[](

)编码(服务消费方)

  • 现在网络上已经有了服务,咱们再来编写服用消费方的代码,一共要创建6个文件,创建顺序和功能如下表:

| 创建顺序 | 文件名 | 作用 |

| — | — | — |

| 1 | pom.xml | 工程的pom文件 |

| 2 | src/main/resources/application.yml | 配置文件 |

| 3 | RemoteInvokeServiceImpl.java | service层,在这里远程调用服务提供方的服务 |

| 4 | DemoController.java | web接口类,对外提供web服务 |

| 5 | SwaggerConfig.java | swagger配置类,便于通过页面测试接口 |

| 6 | SpringBootZKConsumerApplication.java | 启动类 |

  • 完整的文件位置如下图:

  • 接下来逐个创建上述文件;
  1. 创建名为springbootzkconsumer的子工程,pom.xml内容如下,同样需要依赖dubbo-spring-boot-starter和dubbo-dependencies-zookeeper:

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”>

dubbopractice

com.bolingcavalry

1.0-SNAPSHOT

4.0.0

com.bolingcavalry

springbootzkconsumer

1.0-SNAPSHOT

springbootzkconsumer

Demo project for dubbo service consumer from Spring Boot

org.springframework.boot

spring-boot-dependencies

2.3.3.RELEASE

pom

import

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

io.springfox

springfox-swagger2

io.springfox

springfox-swagger-ui

com.bolingcavalry

practiceinterface

${project.version}

org.apache.dubbo

dubbo-dependencies-zookeeper

pom

org.projectlombok

lombok

org.apache.dubbo

dubbo-spring-boot-starter

org.springframework.boot

spring-boot-maven-plugin

${springboot.version}

  1. 编写配置文件application.yml,注意dubbo.registry.address的值:

dubbo:

application:

#application-name 本模块名字

name: springboot-zk-consumer

registry:

address: zookeeper://192.168.50.43:2181

server:

port: 8081

  1. 编写调用远程服务的代码,如下,可见如果想调用远程服务,只要对接口做@Reference注释即可,另外还通过timeout属性增加了超时配置:

package com.bolingcavalry.springbootzkconsumer.service;

import com.bolingcavalry.dubbopractice.service.DemoService;

import org.apache.dubbo.config.annotation.Reference;

import org.springframework.stereotype.Service;

@Service

public class RemoteInvokeServiceImpl {

@Reference(timeout = 2000)

private DemoService demoService;

public String sayHello(String name) {

return "from dubbo remote (zk registry center mode) : " + demoService.sayHello(name);

}

}

  1. 再编写对外提供web服务的Controller类:

package com.bolingcavalry.springbootzkconsumer.controller;

import com.bolingcavalry.springbootzkconsumer.service.RemoteInvokeServiceImpl;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiImplicitParam;

import io.swagger.annotations.ApiOperation;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping("/demo")

@Api(tags = {“DemoController”})

public class DemoController {

@Autowired

private RemoteInvokeServiceImpl remoteInvokeService;

@ApiOperation(value = “获取dubbo service provider的响应”, notes="“获取dubbo service provider的响应”)

@ApiImplicitParam(name = “name”, value = “昵称”, paramType = “path”, required = true, dataType = “String”)

@RequestMapping(value = “/{name}”, method = RequestMethod.GET)

public String sayHello(@PathVariable String name){

return remoteInvokeService.sayHello(name);

}

}

  1. 还要添加swagger配置类:

package com.bolingcavalry.springbootzkconsumer;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import springfox.documentation.builders.ApiInfoBuilder;

import springfox.documentation.builders.PathSelectors;

import springfox.documentation.builders.RequestHandlerSelectors;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.service.Contact;

import springfox.documentation.service.Tag;

import springfox.documentation.spi.documentationType;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration

@EnableSwagger2

public class SwaggerConfig {

@Bean

public Docket createRestApi() {

return new Docket(documentationType.SWAGGER_2)

.apiInfo(apiInfo())

.tags(new Tag(“DemoController”, “演示服务”))

.select()

// 当前包路径

.apis(RequestHandlerSelectors.basePackage(“com.bolingcavalry.springbootzkconsumer.controller”))

.paths(PathSelectors

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

.any())

.build();

}

//构建 api文档的详细信息函数,注意这里的注解引用的是哪个

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

//页面标题

.title(“dubbo远程调用服务的操作(zk注册中心)”)

//创建人

.contact(new Contact(“程序员欣宸”, “https://github.com/zq2599/blog_demos”, “zq2599@gmail.com”))

//版本号

.version(“1.0”)

//描述

.description(“API 描述”)

.build();

}

}

  1. 最后是启动类SpringBootZKConsumerApplication.java:

package com.bolingcavalry.springbootzkconsumer;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

@EnableDubbo

public class SpringBootZKConsumerApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootZKConsumerApplication.class, args);

}

}

  1. 至此,服务消费方编码完成,直接在IDEA上运行SpringBootZKConsumerApplication类即可启动,如下图,可见服务消费方也连接Zookeeper成功:

  1. 通过浏览器访问swagger,地址是:http://localhost:8081/swagger-ui.html ,如下图,点击红框位置展开接口详情:

  1. 如下图,输入web接口参数发起请求:

  1. 下图红框中就是响应的数据,内容是springbootzkconsumer远程调用springbootzkprovider的服务得到的:

[](

)查看Zookeeper上的数据

  1. 再回顾一下官方的有关Zookeeper注册中心中数据的描述,如下图:

  1. 按照上述信息,咱们去Zookeeper看看数据,验证和上图是否一致,登录Zookeeper后执行zkCli.sh进度交互模式;

  2. 查看根目录,果然有名为dubbo的子目录:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号