Grpc微服务从零入门
快速入门
安装
JDK
毫无疑问,要想玩Java,就必须得先装Java JDK,目前公司主要使用的是Oracle JDK 8,安装完成后要配置环境才能正常使用,真蠢,不过也就那么一下下,认了吧。配置方法参考:
http://www.runoob.com/java/java-environment-setup.html
IDE
个人认为Java最好用的IDE就是IntelliJ IDEA (后面会简称IDEA)。IDEA最大的优势就是可定制能力很高。同时有着各种各样的插件能提供不少的扩展和便利。但是个人是希望统一使用默认的配置,不然在代码审查和指导的时候,各种快捷键按了没反应,会很尴尬。默认配置也是经过考验的,基本不会有多少反人类的快捷键,习惯就好。
常用插件
- PlantUML 使用代码绘画UML图
- Python 编写Python
- Markdown 编写Markdown文档
- google protocol 微服务Grpc框架
- Lombok 扩展Java的语法特性
配置(Ctrl+Shift+A)
- Show Line Number
- TODO: 导入Formatter文件
Maven
目前使用Maven作为内部的依赖包管理工具,在使用之前需要配置内部的Maven私库,否则会默认连到外部的公有Maven仓库上。
Hello Java
个人认为TDD是个特别好的实践。所以从Hello Test开始吧。那么先了解一下Java的单元测试所用到的一些技术。
- 测试用到的技术
Hallo Test
新建一个Maven项目,下一步,然后随便起个命名空间com.xudashu,再随便起个名hallo-test,然后随便起个方案名hallo-test,完成。
目录结构非常的清晰:
main里面是代码文件,
test里面是测试文件,
pom.xml是maven的依赖管理配置文件
首先在test的java里面编写SomeThingTest。
断言:assertThat(someThing.Do()).isEqualTo("Hallo Test");
然后alt+enter生成java源码,在生成的SomeThing.Do里面return "Hallo Test";运行测试 mvn clean test。查看hallo-test源码
Hallo Grpc
目前公司使用的微服务的核心技术主要是使用Google开源的GRPC,GRPC使用的是google protocol,(注:在编写这篇文档时,刷了一下git log,最新的GRPC(1.0.0-pre2)加入了thrift的支持。)
使用GRPC,当然要先引入GRPC的依赖包
GRPC的依赖包pom配置
<properties>
<grpc.version>1.0.0-pre2</grpc.version><!-- CURRENT_GRPC_VERSION -->
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/io.grpc/grpc-all -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
<version>${grpc.version}</version>
</dependency>
</dependencies>
所有跨语言的RPC框架,几乎都会使用IDL接口描述语言,GRPC也不例外,GRPC的IDL接口描述语言语法大量参考了C++语法,所以相当简单易懂。
那么在使用之前,需要通过 protocol
buffer 的编译器 protoc 以及一个特殊的 Maven插件将IDL转化成Java语言才能正常的使用。
Maven插件的pom配置
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.4.1.Final</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.5.0</version>
<configuration>
<!--
The version of protoc must match protobuf-java. If you don't depend on
protobuf-java directly, you will be transitively depending on the
protobuf-java version that grpc depends on.
-->
<protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
配置好环境就可以开工了,首先定义好接口契约。
IDL契约
syntax = "proto3";
option java_multiple_files = true;
option java_outer_classname = "HelloWorldProto";
package com.xudashu.helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (SayHelloRequest) returns (SayHelloResponse) {}
}
// The request message containing the user's name.
message SayHelloRequest {
string name = 1;
}
// The response message containing the greetings
message SayHelloResponse {
string message = 1;
}
然后mvn clean install
生成代码,在Service层新建GreeterImpl类,继承GreeterGrpc.GreeterImplBase
public class GreeterImpl extends GreeterGrpc.GreeterImplBase {
@Override
public void sayHello(SayHelloRequest request, StreamObserver<SayHelloResponse> responseObserver) {
SayHelloResponse response = SayHelloResponse.newBuilder()
.setMessage("Hallo " + request.getName()).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
在Test里面,新建Application,使用NettyServer来启动Grpc服务。
public static void main(String[] args) throws Exception {
int port = 8080;
NettyServerBuilder.forPort(port)
.addService(ServerInterceptors.intercept(new GreeterImpl()))
.build().start();
}
启动服务后,使用NettyChannel来创建Grpc的通道,创建完成后,和调用本地应用一样简单方便了。
channel = NettyChannelBuilder.forAddress("127.0.0.1", port)
.negotiationType(NegotiationType.PLAINTEXT)
.build();
blockingStub = GreeterGrpc.newBlockingStub(channel);
SayHelloRequest request = SayHelloRequest.newBuilder()
.setName("许大叔")
.build();
SayHelloResponse response = blockingStub.sayHello(request);
assertThat(response.getMessage()).isEqualTo("Hallo 许大叔");
Grpc微服务从零入门的更多相关文章
- golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布
本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-mi ...
- 微服务 + Docker + Kubernetes 入门实践 目录
微服务 + Docker + Kubernetes 入门实践: 微服务概念 微服务的一些基本概念 环境准备 Ubuntu & Docker 本文主要讲解在 Ubuntu 上安装和配置 Dock ...
- Surging 微服务框架使用入门
原文:Surging 微服务框架使用入门 前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的看法 我目前所在的公司采用架构就是类似与Sur ...
- golang微服务框架go-micro 入门笔记2.4 go-micro service解读
本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web
micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- 微服务和SpringCloud入门
微服务和SpringCloud入门 微服务是什么 微服务的核心是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种 ...
- golang微服务框架go-micro 入门笔记2.1 micro工具之micro api
micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.s ...
- Java云原生崛起微服务框架Quarkus入门实践
@ 目录 概述 定义 GraalVM简介 为何使用 特性 官方性能 实战 入门示例 步骤 安装GraalVM 创建quarkus工程 Idea导入项目 Idea运行和调试 打包成普通的Jar 打包成依 ...
- golang微服务框架go-micro 入门笔记1.搭建 go-micro环境
微服务的本质是让专业的人做专业的事情,做出更好的东西. golang具备高并发,静态编译等特性,在性能.安全等方面具备非常大的优势.go-micro是基于golang的微服务编程框架,go-micro ...
随机推荐
- 初识nginx
先来一波官方站点关于nginx介绍.nginx相关历史这里不再赘述啦. nginx 是免费,开源,高性能 HTTP 服务器和反向代理服务器,也可作为IMAP/POP3代理服务器.nginx以它的高 ...
- 传统B2B中小型企业如何做好全网营销
优网特独创全网营销服务理念,全网营销即以企业网站推广为核心,通过SEO.SEM.BBS营销.博客营销.微营销.即时通讯营销.网络口碑营销.视频营销.邮件营销.SNS营销等网络营销手段,全面提升企业网站 ...
- python os模块
import os path = "路径" os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname" ...
- tomcat 内存问题 xms xmx permsize maxPermsize
转自:http://www.cnblogs.com/koik/p/4452029.html tomcat -Xms -Xmx -XX:PermSize -XX:MaxPermSize 在做ja ...
- DOM查找元素
1. 查找元素5种: 1. 按id查找1个元素对象: var elem=document.getElementById("id值"); 何时使用:1. 元素必须有id 2. 精确查 ...
- sqlserver2012 表分区
无论是新建数据库,还是现有的问题,都可以执行表分区的操作. 1.在数据库中点鼠标右键点击属性,在选择页,选中文件栏,在数据库文件列表中,可以看到现有的数据库文件逻辑名称.文件类型.初始大小.保存位置等 ...
- 史上最强大网盘,网络上的赚钱神器【Yunfile网盘】,注册就送8元
YunFile.com,是提供在线存储和文件保存服务最大的网站之一,从2007年创立至今,我们提供免费的和您可以承受的收费服务.这些服务包括高级在线存储/远程备份服务,和先进的上传和下载工具.上百万来 ...
- 用Asp.net写自己的服务框架
阅读目录 开始 理解Asp.net管线 HttpHandler HttpModule 关于Content-Encoding的解释 选 HttpHandler 还是 HttpModule ? 看不见的性 ...
- qq协助
今天和一个朋友开完笑说让我进他的电脑,从而出现这篇文章!!!! 目前的QQ版本支持远程协助,所以想到通过两个QQ号码完成对另一台电脑的控制第一台电脑:1.自动登录QQ2.打开另一个QQ号码窗口3. ...
- js复制内容加版权声明代码
$("body").on('copy', function (e) { if (typeof window.getSelection == "undefined" ...