1、前言

因为工作的关系,最近很少更新surging,因为surging 一直处在不温不火的状态,而自己每天利用业余时间进行完善,每天都是疲惫的状态,还要应付新手的提问,曾经一度想放弃,但是有些人劝说,surging 已经有一定的忠粉,放弃难免可惜,你可以发展收费版本,这样你也有动力进行更新,用户也有需求,付费也是情理之中,你也能更好的发展下去。就在上个月我剥离了企业版、预定版、社区版。

社区版:阉割版本,不带配置中心,文档,服务编排流程引擎,管理中心等功能,而且没有咨询服务

预定版:部分企业版本功能,有配置中心,文档,部分中间件,带咨询服务,

企业版:2天一对一培训课程,咨询服务,有配置中心,文档,服务编排流程引擎,管理中心,所有中间件,

社区版地址:https://github.com/dotnetcore/surging

2、什么是微服务

这几年微服务这个话题很火,可谓是你方唱罢我登场,什么框架都要和微服务牵扯点关系,和微服务没关系就会显得很low,对于微服务设计,没有明确的定义,所以市面大多都有自己的理解和定义,而我个人认为大部分开源都是老汤换新药,都是一个疗效没有本质的区别,最主要是骗骗领导,对外宣传公司的技术实力,而对于现实来讲,基本上真正的微服务都在一二线互联网公司,而且你会发现总公司,分公司,附属公司都要自己开发一套微服务,而这是为什么呢?因为有弊端,要开发属于自己的微服务,来满足业务的需求。那么我是怎么理解这个微服务呢?

微服务是针对业务的松耦合,是对于业务的解耦,也是粒度最小的功能业务模块,对于协议高度集成化,对于本地和远程调用的抽象化和服务治理保证了可靠性通信,技术人员只关注业务实现和拆分,而无需关注底层的业务实现。

而以上只是谈了微服务的思想,那么对于微服务就需要通过引擎扫描或者引用加载业务服务模块驱动生成服务提供者,而针对于行业解决方案,我们可以加载需要协议服务主机。那么我们下面来谈谈如何扩展协议服务主机

3、协议主机集成-behavior特性

针对于协议服务主机,我们有必要认识下behaviors,那么什么是behaviors呢?

behaviors是协议服务主机引擎特性, 每个扩展的主机都包含一个 behavior, 可以包含属性、数据、标识和方法,组件引用它时,它的属性、数据和方法会被合并到组件中,对于各自的behavior会在启动的时候进行初始化生成ServiceEntries。里面包含了类型,routepath, behaviors. 以下各个协议服务主机的behavior

BackgroundServiceBehavior:继承IServiceBehavior, 后台托管服务,可以构建后台定时任务

UdpBehavior:继承IServiceBehavior,可以集成UDP协议

WSBehavior:继承于IServiceBehavior,可以集成ws协议

GreeterBehavior: 继承于IServiceBehavior和Protos生成的GreeterBase,可以集成Grpc

MqttBehavior:继承于ServiceBase,可以集成MQTT协议

DnsBehavior:继承于IServiceBehavior,可以集成DNS

以上所有的Behavior,IServiceBehavior和ServiceBase都支持rest,rpc可靠性远程调用。

4、协议主机-Grpc

对于刚刚更新Grpc 服务主机,有些人还不会用,这里我们谈谈如何构建Grpc

业务接口

首先建立业务接口,代码如下

  [ServiceBundle("api/{Service}/{Method}")]
public interface IGreeterService : IServiceKey
{
}

proto文件

在创建proto 文件前,需要nuget安装Google.Protobuf,Grpc.Core,Grpc.Tools。

然后在业务接口模块创建的Protos/greet.proto 文件内容如下:

syntax = "proto3";

package Greet;

// 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 = ;
} // The response message containing the greetings.
message HelloReply {
string message = ;
}

因为是利用Grpc.Tools工具 通过.proto文件生成C#资源文件。所以还需要编辑.csproject文件,需要把以下代码添加到.csproject文件中。

  <ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>

Behavior特性

针对于grpc需要再创建Behavior,并且继承通过Grpc.Tools生成的Greeter.GreeterBase和IServiceBehavior,代码如下

 public  partial class GreeterBehavior : Greeter.GreeterBase,IServiceBehavior
{ }

业务模块

针对于业务模块,需要继承Behavior和业务接口,代码如下

    public class GreeterService: GreeterBehavior, IGreeterService
{
public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
{
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}

配置

添加Surging.Core.Grpc引擎组件,配置GrpcPort,启用GrpcModule,配置surgingSettings.json如下

    "Ports": {
"HttpPort": "${HttpPort}|280",
"WSPort": "${WSPort}|96",
"MQTTPort": "${MQTTPort}|97",
"GrpcPort": "${GrpcPort}|95"
}
    "Packages": [
{
"TypeName": "EnginePartModule",
"Using": "${UseEngineParts}|ServiceProxyModule;DotNettyModule;NLogModule;MessagePackModule;ConsulModule;WSProtocolModule;MqttProtocolModule;EventBusRabbitMQModule;CachingModule;KestrelHttpModule;DnsProtocolModule;SwaggerModule;ApiGeteWayModule;SkywalkingModule;KestrelNLogModule;ServiceHostModule;GrpcModule"
}
]

通过以上服务端配置,那么再通过创建client 进行测试

客户端

而针对于客户端,也需要nuget 安装需要Google.Protobuf,Grpc.Core,Grpc.Tools。同时创建greet.proto 文件,然后我们需要编辑.csproject文件,需要把以下代码添加到.csproject文件中。

  <ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
</ItemGroup>

然后封装ServiceClient调用,代码如下

using Greet;
using Grpc.Core; namespace GrpcService1
{
public class ServiceClient
{
private static ChannelBase _channel;
private static Greeter.GreeterClient _client; static ServiceClient()
{
_channel = new Channel("127.0.0.1", , ChannelCredentials.Insecure);
_client = new Greeter.GreeterClient(_channel);
} public static HelloReply SayHello(string name)
{
return _client.SayHello(new HelloRequest
{
Name = name
});
}
}
}

再在Main函数中调用封装好的ServiceClient,代码如下

using System;

namespace GrpcService1
{
public class Program
{
public static void Main(string[] args)
{
var result = ServiceClient.SayHello("fanly"); Console.WriteLine("grpc Client Call SayHello():" + result);
Console.WriteLine("任意键退出...");
Console.ReadKey();
} }
}

运行结果如下图所示

surging 微服务引擎 -协议主机的Behavior特性的更多相关文章

  1. surging 微服务引擎 2.0 会有多少惊喜?

    surging 微服务引擎从2017年6月至今已经有两年的时间,这两年时间有多家公司使用surging 服务引擎,并且有公司搭建了CI/CD,并且使用了k8s 集群,这里我可以说下几家公司的服务搭建情 ...

  2. 谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能

    一.前言 surging是基于.NET CORE 服务引擎.初始版本诞生于2017年6月份,经过NCC社区二年的孵化,2.0版本将在2019年08月28日进行发布,经历二年的发展,已经全部攘括了微服务 ...

  3. surging 微服务引擎 1.0 正式发布

    surging 是一个分布式微服务引擎,提供高性能RPC远程服务调用,服务引擎支持http.TCP.WS.Mqtt协议,采用Zookeeper.Consul作为surging服务的注册中心,集成了哈希 ...

  4. (三)surging 微服务框架使用系列之我的第一个服务(审计日志)

    前言:前面准备了那么久的准备工作,现在终于可以开始构建我们自己的服务了.这篇博客就让我们一起构建自己的第一个服务---审计日志. 首先我们先创建两个项目,一个控制台的服务启动项目,一个业务的实现项目. ...

  5. 一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装(转载 https://www.cnblogs.com/alangur/p/8339905.html)

    (一)surging 微服务框架使用系列之surging 的准备工作rabbitmq安装   (1)下载erlang: http://www.erlang.org/download/otp_win64 ...

  6. 转载 (三)surging 微服务框架使用系列之我的第一个服务(审计日志)

    (三)surging 微服务框架使用系列之我的第一个服务(审计日志)   前言:前面准备了那么久的准备工作,现在终于可以开始构建我们自己的服务了.这篇博客就让我们一起构建自己的第一个服务---审计日志 ...

  7. Surging 微服务框架使用入门

    原文:Surging 微服务框架使用入门 前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正.  我对 surging 的看法 我目前所在的公司采用架构就是类似与Sur ...

  8. Anno微服务引擎与传统应用相融合

    1.Anno是什么? Anno是一个微服务引擎.在此之前我们通过 Viper项目对Anno有一个基本的认识,并且Viper也受到的很多朋友的喜欢,截止发稿前Viper在GitHub收获了300多个星. ...

  9. 云图说丨初识华为云微服务引擎CSE

    摘要:微服务引擎(Cloud Service Engine,CSE),是用于微服务应用的云中间件,为用户提供注册发现.服务治理.配置管理等高性能和高韧性的企业级云服务能力 本文分享自华为云社区< ...

随机推荐

  1. 005 Python开发环境配置

    目录 一.概述 二.Python语言概述 2.1 Python语言的诞生 2.2 Monty Python组合 三.Python语言系统开发环境配置 四.Python程序编写与运行 4.1 Pytho ...

  2. Java 中创建对象的 5 种方式!

    Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 Employee类: class Employee implements Cloneable, Serializable { pri ...

  3. git修改user.name 和user.email

    今天刚刚入门了下git,,然后初始化的时候将用户名弄错了...就很气啊.然后网上找了半天都找不出一个可靠的修改全局用户名和邮箱的方法..   最后还是自己摸索出来了..其实也很简单.   首先进入gi ...

  4. Python网络爬虫实战(一)快速入门

    本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站的爬虫实战来进行. 我们编写网络爬虫最主要 ...

  5. 表达式树练习实践:C# 五类运算符的表达式树表达

    目录 表达式树练习实践:C# 运算符 一,算术运算符 + 与 Add() - 与 Subtract() 乘除.取模 自增自减 二,关系运算符 ==.!=.>.<.>=.<= 三 ...

  6. Winform中对ZedGraph的曲线标签进行设置,比如去掉标签边框

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. StringBuilder和StringBuffer的区别

    Java中StringBuilder和StringBuffer的区别分析 StringBUilder是线程不安全的(线程同步访问的时候会出问题),但是效率相对较高. (String类型使用加号进行拼接 ...

  8. 注解@Async解决异步调用问题

    序言:Spring中@Async 根据Spring的文档说明,默认采用的是单线程的模式的.所以在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的. 那么当多个任务的执行势必会相互影响. ...

  9. 基于GitHub Issues的评论系统--gitment

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. ![file](https://img2018.cnblogs.com/blog/830272/201909/ ...

  10. jenkins自动化部署项目3 --设置用户

    我直接设置的admin ,jenkins可以新建多个用户,并赋予不同的权限(TODO) 等后续需要严格规范操作人的时候再补充