elixir grpc 试用
备注:
a. 安装 protoc 参考相关文档,比较简单
b. 安装elixir grpc 插件 protoc-gen-elixir 同时配置环境变量
a. 创建项目
mix new appdemo
cd appdemo
touch helloword.proto
syntax = "proto3";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";
package helloworld;
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
项目结构如下:
├── README.md
├── config
│ └── config.exs
├── helloword.proto
├── lib
│ ├── appdemo.ex
├── mix.exs
└── test
├── appdemo_test.exs
└── test_helper.exs
b. 生成代码
protoc --elixir_out=./lib helloword.proto
protoc -I . --elixir_out=plugins=grpc:./lib/ helloword.proto
结果如下:
├── README.md
├── config
│ └── config.exs
├── helloword.proto
├── lib
│ ├── appdemo.ex
│ └── helloword.pb.ex
├── mix.exs
└── test
├── appdemo_test.exs
└── test_helper.exs
内容:
defmodule Helloworld.HelloRequest do
use Protobuf
@type t :: %__MODULE__{
name: String.t()
}
defstruct [:name]
field :name, 1, optional: true, type: :string
end
defmodule Helloworld.HelloReply do
use Protobuf
@type t :: %__MODULE__{
message: String.t()
}
defstruct [:message]
field :message, 1, optional: true, type: :string
end
defmodule Helloworld.Greeter.Service do
use GRPC.Service, name: "helloworld.Greeter"
rpc :SayHello, Helloworld.HelloRequest, Helloworld.HelloReply
end
defmodule Helloworld.Greeter.Stub do
use GRPC.Stub, service: Helloworld.Greeter.Service
end
a. server端实现代码
lib/server.ex
defmodule Helloworld.Greeter.Server do
use GRPC.Server, service: Helloworld.Greeter.Service
@spec say_hello(Helloworld.HelloRequest.t(), GRPC.Server.Stream.t()) ::
Helloworld.HelloReply.t()
def say_hello(request, _stream) do
Helloworld.HelloReply.new(message: "Hello #{request.name}")
end
end
b. 项目使用opt 进行运行,具体来说是supervisor
lib/helloworld_app.ex
defmodule HelloworldApp do
use Application
def start(_type, _args) do
import Supervisor.Spec
children = [
supervisor(GRPC.Server.Supervisor, [{Helloworld.Greeter.Server, 50051}])
]
opts = [strategy: :one_for_one, name: HelloworldApp]
Supervisor.start_link(children, opts)
end
end
c. mix.exs 启动配置
def application do
[mod: {HelloworldApp, []},
applications: [:logger, :grpc]]
end
defp deps do
[
{:grpc, github: "tony612/grpc-elixir"},
{:dialyxir, "~> 0.5", only: [:dev, :test], runtime: false},
]
end
d. config/config.exs
use Mix.Config
# Start server in OTP
config :grpc, start_server: true
mix deps.get,compile
iex -S mix
参考 https://github.com/rongfengliang/grpc-elixir
https://github.com/rongfengliang/grpc-elixir
https://github.com/rongfengliang/gprc-elixir-server
https://github.com/tony612/grpc-elixir
elixir grpc 试用的更多相关文章
- nginx grpc 试用
1. 编译 wget https://nginx.org/download/nginx-1.13.10.tar.gz tar xvf nginx-1.13.10.tar.gz cd nginx-1.1 ...
- RPC的故事
今天我跟几个RPC框架之间发生了一些事,情节跌宕起伏一波三折,不吐不快,以至于我这个从来不写博客的人也忍不住写下来分享一下. 背景 主系统部署在Windows上(.NET 4.5),子系统(.NET ...
- phoenix elixir 框架简单试用
备注: 官方提供的脚手架工具,我们可以直接使用,生成代码,同时需要nodejs 环境配置(比较简单,参考 相关资料即可) 1. 安装脚手架 mix archive.install https:/ ...
- purescript 基本试用
安装环境 安装预编译文件 https://github.com/purescript/purescript/releases 配置环境变量: export PATH=$PATH:/Users/dalo ...
- 【译】gRPC vs HTTP APIs
本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou. 写在开头 现在,ASP.NET Core使开发人员可以构建gRPC服务. ...
- 「译」 .NET 6 中 gRPC 的新功能
gRPC是一个现代的.跨平台的.高性能的 RPC 框架.gRPC for .NET 构建在 ASP.NET Core 之上,是我们推荐的在 .NET 中构建 RPC 服务的方法. .NET 6 进一步 ...
- 解决go-micro与其它gRPC框架之间的通信问题
在之前的文章中分别介绍了使用gRPC官方插件和go-micro插件开发gRPC应用程序的方式,都能正常走通.不过当两者混合使用的时候,互相访问就成了问题.比如使用go-micro插件生成的gRPC客户 ...
- gRPC源码分析1-SSL/TLS
引子 前几天看到微信后台团队分享了TLS相关文章,正好gRPC里TLS数据加密是很重要的一块,于是整理出了这篇文章. 在gRPC里,如果仅仅是用来做后端微服务,可以考虑不加密.本文太长,先给个大纲. ...
- gRPC源码分析2-Server的建立
gRPC中,Server.Client共享的Class不是很多,所以我们可以单独的分别讲解Server和Client的源码. 通过第一篇,我们知道对于gRPC来说,建立Server是非常简单的,还记得 ...
随机推荐
- Maven 三种archetype说明
新建Maven project项目时,需要选择archetype. 那么,什么是archetype? archetype的意思就是模板原型的意思,原型是一个Maven项目模板工具包.一个原型被定义为从 ...
- spring mvc: xml生成
spring mvc: xml生成 准备: javax.xml.bind.annotation.XmlElement; javax.xml.bind.annotation.XmlRootElement ...
- linux入门总结
linux的核心概念知识: linux软件是开源免费的,而linux是由Unix演变而成,Unix是由MINIX演变而成. 2000年以后,linux系统日趋成熟,涌现大量基于linux服务平 ...
- 使用Idea工具nodeJS+mysql开发项目
一.MySQL Server的安装 1.mysql官网下载文件包:[我使用的版本是:mysql_5.7.17] 2.解压Zip压缩包: 3.安装:命令行:D:\soft\mysql-5.7.17-wi ...
- 最优比率生成树 poj2728
Desert King Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 28407 Accepted: 7863 Desc ...
- IOS-Quartz2D(Paths元素)
Paths中的几个重要元素 Points void CGContextMoveToPoint ( CGContextRef c, CGFloat x, CGFloat y ); 指定 ...
- 由浅入深了解EventBus:(六)
线程模型 在EventBus3.0框架中执行线程的快速切换,通过ThreadMode来指定线程在哪个线程中执行; 在EventBus3.0框架线程模型有个PendingPost 类负责数据的传递; f ...
- Java进阶3. 内存回收机制
Java进阶3. 内存回收机制 20131029 前言: 学过C++的都知道,C++中内存需要程序员自己维护.说道这里,很多开发的同学就感觉很痛苦,当他转向Java的时候,就会说你看Java多好啊,程 ...
- 用国内镜像源pip加速安装模块
记住,如果使用了virtualenv,一定要先workon进入虚拟环境再执行包安装命令. pip install -i https://pypi.douban.com/simple/ 模块名(如:dj ...
- centos7环境配置
CentOS-7-64bit 配置Apache + MySQL + PHP :http://blog.itpub.net/29773961/viewspace-1261417/ 上面教程可以正常安装阿 ...