.NET Core 现已支持DRPC,同时带来Apache Thrift
Posted dotNet大数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET Core 现已支持DRPC,同时带来Apache Thrift相关的知识,希望对你有一定的参考价值。
上篇文章为大家带来了新版本的 Storm 适配器,今天来弥补一下上次匆忙发布带来的遗憾。是的,DRPC for .net Core 来了,当然,为了实现这个功能,一个精简版本的 Apache Thrift for .net core 也产生了;这个类库根据 Poadmap for adding new language bindings (https://thrift.apache.org/docs/HowToNewLanguage) 完成,为了不带来误解,该项目暂时不开源,仅在 Nugut 中供 storm-net-adapter (https://github.com/ziyunhx/storm-net-adapter) 使用,如果你也暂时需要它,可以通过 Nuget 搜索 Tnidea.Thrift 获得。
storm-net-adapter (https://github.com/ziyunhx/storm-net-adapter) 最新版本为 2.0.5,现在支持 .Net4.0+, .Net Core。下面给大家介绍如何快速开始创建一个 DRPC Topology:
1. 创建.Net DRPC Topology项目
使用命令创建新的 .Net Core 项目:
mkdir StormSample
cd StormSample
dotnet new
在项目中添加 Storm.Net.Adapter 引用:
"dependencies": {
"Storm.Net.Adapter": "2.0.5"
}
创建一个 SimpleDRPC 类:
using Storm;
using System;
using System.Collections.Generic;
namespace StormSample
{
public class SimpleDRPC : IBolt
{
private Context ctx;
/// <summary>
/// Implements of delegate "newPlugin", which is used to create a instance of this spout/bolt
/// </summary>
/// <param name="ctx">Context instance</param>
/// <returns></returns>
public static SimpleDRPC Get(Context ctx)
{
return new SimpleDRPC(ctx);
}
public SimpleDRPC(Context ctx)
{
Context.Logger.Info("SimpleDRPC constructor called");
this.ctx = ctx;
// Declare Input and Output schemas
Dictionary<string, List<Type>> inputSchema = new Dictionary<string, List<Type>>();
inputSchema.Add("default", new List<Type>() { typeof(string), typeof(object) });
Dictionary<string, List<Type>> outputSchema = new Dictionary<string, List<Type>>();
outputSchema.Add("default", new List<Type>() { typeof(string), typeof(object) });
this.ctx.DeclareComponentSchema(new ComponentStreamSchema(inputSchema, outputSchema));
}
public void Execute(StormTuple tuple)
{
Context.Logger.Info("SimpleDRPC Execute enter");
string sentence = tuple.GetString(0) + "!";
this.ctx.Emit("default", new List<StormTuple> { tuple }, new List<object> { sentence, tuple.GetValue(1) });
Context.Logger.Info("SimpleDRPC Execute exit");
ApacheStorm.Ack(tuple);
}
public void Prepare(Config stormConf, TopologyContext context)
{
return;
}
}
}
2. 使用Java封装Storm Topology
package org.apache.storm.starter;
import org.apache.storm.Config;
import org.apache.storm.LocalCluster;
import org.apache.storm.LocalDRPC;
import org.apache.storm.StormSubmitter;
import org.apache.storm.drpc.DRPCSpout;
import org.apache.storm.drpc.LinearDRPCTopologyBuilder;
import org.apache.storm.drpc.ReturnResults;
import org.apache.storm.spout.ShellSpout;
import org.apache.storm.task.ShellBolt;
import org.apache.storm.topology.IRichBolt;
import org.apache.storm.topology.IRichSpout;
import org.apache.storm.topology.OutputFieldsDeclarer;
import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import java.util.Map;
/**
* This topology demonstrates Storm's stream groupings and multilang capabilities.
*/
public class DrpcTestTopologyCsharp {
public static class SimpleDRPC extends ShellBolt implements IRichBolt {
public SimpleDRPC() {
super("dotnet", "StormSample.dll", "SimpleDRPC");
}
@Override
public void declareOutputFields(OutputFieldsDeclarer declarer) {
declarer.declare(new Fields("id", "result"));
}
@Override
public Map<String, Object> getComponentConfiguration() {
return null;
}
}
public static void main(String[] args) throws Exception {
TopologyBuilder builder = new TopologyBuilder();
DRPCSpout drpcSpout = new DRPCSpout("simpledrpc");
builder.setSpout("drpc-input", drpcSpout,1);
builder.setBolt("simple", new SimpleDRPC(), 2)
.noneGrouping("drpc-input");
builder.setBolt("return", new ReturnResults(),1)
.noneGrouping("simple");
Config conf = new Config();
conf.setDebug(true);
conf.setMaxTaskParallelism(1);
try
{
StormSubmitter.submitTopology("drpc-q", conf,builder.createTopology());
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
注意调用代码中的 StormSimple.dll:
super(“dotnet”, “StormSimple.dll”, “SimpleDRPC”);
打包 StormSample ,并将依赖项一起拷贝到 multilang/resources 。
使用 Maven 打包 Java 项目,通过 storm jar 命令提交:
$ storm jar storm-starter-1.0.1.jar org.apache.storm.starter.DrpcTestTopologyCsharp simpledrpc
3. 使用C#调用刚刚提交的DRPC Topology
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Storm;
namespace Storm.DRPC.Demo
{
public class Program
{
public static void Main(string[] args)
{
DRPCClient client = new DRPCClient("host", 3772);
string result = client.execute("simpledrpc", "hello word");
Console.WriteLine(result);
Console.WriteLine("Please input a word and press enter, if you want quit it, press enter only!");
do
{
string input = Console.ReadLine();
if (string.IsNullOrEmpty(input))
break;
Console.WriteLine(client.execute("simpledrpc", input));
}
while (true);
}
}
}
至此就全部结束了!所有的代码都在 storm-net-adapter (https://github.com/ziyunhx/storm-net-adapter) 可以找到,你可以通过 Star 与 Fork 该项目来支持我!
本文来自 The NewIdea,作者 Carey Tzou 。
未经授权,拒绝任何全文及摘要转载!
以上是关于.NET Core 现已支持DRPC,同时带来Apache Thrift的主要内容,如果未能解决你的问题,请参考以下文章
.NET 6 Preview 6 现已推出,其中包括对 ASP.NET Core 的许多重大改进。
ASP.NET Core 同时支持多种认证方式 | Swagger 支持
在ubuntu linux使用wifi创建AP同时使用wifi上网和共享热点,直接命令行就可以,目前一般的wifi设备都支持创建ap,可以同时上网同时共享热点。
在ubuntu linux使用wifi创建AP同时使用wifi上网和共享热点,直接命令行就可以,目前一般的wifi设备都支持创建ap,可以同时上网同时共享热点。
在ubuntu linux使用wifi创建AP同时使用wifi上网和共享热点,直接命令行就可以,目前一般的wifi设备都支持创建ap,可以同时上网同时共享热点。