第一次将内容添加到azure event hubs

由于每秒数据吞吐量巨大,需要将实时数据存到event hubs,再由event hubs定时定量保存到document DB。

event hubs的介绍详见微软官页:https://azure.microsoft.com/zh-tw/services/event-hubs/

事件中樞

從網站、應用程式和裝置擷取雲端等級的遙測數據

  • 幾乎每秒即時地記錄數百萬個事件
  • 使用靈活的授權與節流來連接裝置
  • 以時間為基礎處理事件緩衝
  • 利用彈性化的規模來管理服務
  • 使用原生用戶端程式庫連接廣泛的平台
  • 其他雲端服務隨插即用的配接器

每秒串流處理數百萬個事件

Azure 事件中樞是極具調整規模彈性的「發佈-訂閱」服務,其每秒可吸取上百萬項事件,並將這些事件串流至多項應用程式。如此可讓您處理及分析由所連接之裝置與應用程式所產生的大量資料。當事件中樞收集到資料之後,即可利用任何即時分析提供者或以批次/儲存裝置介面卡,來轉換及儲存資料。

處理具變動式負載數據來源的事件

現今的互聯世界即是由巨量資料所構成。巨量資料源自許多變動式負載數據來源,像是每隔幾分鐘即產生遙測資料的互聯車輛與控溫器、每秒產生事件的應用程式效能計數器,以及擷取每位使用者個別動作遙測資料的行動應用程式。事件中樞是一款受管理的服務,其能吸取規模具彈性的事件,以容納這些變動式負載數據來源以及由間歇連接所引發的尖峰情況。

跨平台連接數百萬個裝置

因為所連接的裝置種類成長快速,且涉及各種平台與通訊協定,所以讓吸取來自各種裝置的資料形成相當大的挑戰。而事件中樞不僅能處理各式規模的彙總串流,同時也可迎接這項連接不同資料來源的挑戰。事件中樞可輕鬆佈建容量,處理來自上百萬項裝置的事件,同時也能以裝置為單位維持事件順序。對進階訊息佇列通訊協定 (AMQP) 與 HTTP 所提供的支援,能讓許多平台皆可使用事件中樞。常見的平台也有原生用戶端程式庫可用。

定义event hubs:

private EventHubClientMapping _eventHubClient = new EventHubClientMapping();

保存:

 1  protected void SaveDomainUserToFile(DomainUser user, bool isReceive = false)
 2         {
 3             System.Runtime.Serialization.Json.DataContractJsonSerializer json =
 4                    new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(DomainUser));
 5
 6             json.WriteObject(stream, user);
 7             stream.Write(_cn, 0, _cn.Length);
 8
 9             byte[] bs = stream.ToArray();
10             String contentStr = System.Text.Encoding.UTF8.GetString(bs);
11             //Event Hub
12             try
13             {
14                 Notify(contentStr);
15             }
16             catch (Exception ex)
17             {
18                 throw ex;
19             }
20
21             StartSave();
22         }

调用接口方法:

1  public void Notify(string cookie)
2         {
3             _eventHubClient.AddMessage(cookie);
4         }

webconfig中要加入这两句:

1 </configuration>
2 <appSettings>
3     <add key="MappingDataFlowEventHubConnection" value="Endpoint=sb://xxx.servicebus.chinacloudapi.cn/;SharedAccessKeyName=sender;SharedAccessKey=xxx;TransportType=Amqp"/>
4     <add key="MappingDataFlowEventHubName" value="mapping-response-eventhub" />
5   </appSettings>
6 </configuration>

azure cloud service上的配置:

继承的接口azure core中建立interface:

 1  public interface IMappingNotify
 2     {
 3         void Notify(string cookie);
 4     }
 5
 6     public class MappingNotify
 7     {
 8         public CookieSource CookieSource { get; set; }
 9
10         public string Company { get; set; }
11
12         public string Domain { get; set; }
13
14         public string IP { get; set; }
15
16         public string Lang { get; set; }
17
18         public string PUID { get; set; }
19
20         public string Refer { get; set; }
21
22         public string ScreenHeight { get; set; }
23
24         public string ScreenWidth { get; set; }
25
26         public string TimeStamp { get; set; }
27
28         public string Title { get; set; }
29
30         public string UA { get; set; }
31
32         public string UID { get; set; }
33
34         public string URL { get; set; }
35
36         public string Version { get; set; }
37
38         public static byte[] Serialize(string cookie)
39         {
40             var message = string.Format("{0}", cookie);
41
42             return Encoding.UTF8.GetBytes(message);
43         }
44
45         public static IList<MappingNotify> Deserialize(byte[] message)
46         {
47             if (message == null || message.Length == 0)
48                 throw new Exception("message is null.");
49
50             var mns = new List<MappingNotify>();
51
52             var str = Encoding.UTF8.GetString(message);
53             string[] jsons = str.Trim(‘\n‘).Trim(‘\r‘).Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
54
55             foreach (string json in jsons)
56             {
57                 var jObject = JObject.Parse(json);
58
59                 var mn = new MappingNotify();
60
61                 if (jObject["company"] != null)
62                     mn.Company = jObject["company"].ToString();
63                 if (jObject["domain"] != null)
64                     mn.Domain = jObject["domain"].ToString();
65                 if (jObject["ip"] != null)
66                     mn.IP = jObject["ip"].ToString();
67                 if (jObject["lang"] != null)
68                     mn.Lang = jObject["lang"].ToString();
69                 if (jObject["puid"] != null)
70                     mn.PUID = jObject["puid"].ToString();
71                 if (jObject["refer"] != null)
72                     mn.Refer = jObject["refer"].ToString();
73                 if (jObject["screenHeight"] != null)
74                     mn.ScreenHeight = jObject["screenHeight"].ToString();
75                 if (jObject["screenWidth"] != null)
76                     mn.ScreenWidth = jObject["screenWidth"].ToString();
77                 if (jObject["timestamp"] != null)
78                     mn.TimeStamp = jObject["timestamp"].ToString();
79                 if (jObject["title"] != null)
80                     mn.Title = jObject["title"].ToString();
81                 if (jObject["ua"] != null)
82                     mn.UA = jObject["ua"].ToString();
83                 if (jObject["uid"] != null)
84                     mn.UID = jObject["uid"].ToString();
85                 if (jObject["url"] != null)
86                     mn.URL = jObject["url"].ToString();
87                 if (jObject["version"] != null)
88                     mn.Version = jObject["version"].ToString();
89
90                 mn.CookieSource = CookieSource.mapping;
91
92                 mns.Add(mn);
93             }
94
95             return mns;
96         }
97     }

在azure cloud service上的configuration文件加上这两句:

1 <ConfigurationSettings>
2       <Setting name="MappingDataFlowEventHubConnection" value="Endpoint=sb://xxx.servicebus.chinacloudapi.cn/;SharedAccessKeyName=sender;SharedAccessKey=xxx;TransportType=Amqp"/>
3       <Setting name="MappingDataFlowEventHubName" value="mapping-response-eventhub" />
4     </ConfigurationSettings>

在azure business中加入一个cs文件:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.ComponentModel.Composition;
 7
 8 using xxx.Core.Interface;
 9 using xxx.Core.Entity;
10 using xxx.Core;
11 using xxx.Core.Client;
12
13 namespace xxx.Business
14 {
15     [Export(typeof(IMappingNotify))]
16     public class EventHubMappingNotify : IMappingNotify
17     {
18         private EventHubClientMapping _eventHubClient = new EventHubClientMapping();
19
20         public void Notify(string cookie)
21         {
22             _eventHubClient.AddMessage(cookie);
23         }
24     }
25
26 }

在azure core中config.cs文件中加入config信息:

 1 //EventHub链接
 2         public static string MappingDataFlowEventHubConnection
 3         {
 4             get
 5             {
 6                 var config = CloudConfigurationManager.GetSetting("MappingDataFlowEventHubConnection");
 7                 if (string.IsNullOrEmpty(config))
 8                     throw new Exception("MappingDataFlowEventHubConnection hasn‘t configured!");
 9
10                 return config;
11             }
12         }

EventHub链接

 1 //EventHub存储配置
 2         public static string MappingDataFlowEventHubName
 3         {
 4             get
 5             {
 6                 var config = CloudConfigurationManager.GetSetting("MappingDataFlowEventHubName");
 7                 if (string.IsNullOrEmpty(config))
 8                 {
 9                     return "mapping-response-eventhub";
10                 }
11
12                 return config;
13             }
14         }

EventHub存储配置

 1 //EventHub消费者组
 2         public static string MappingDataFlowEventHubConsumer
 3         {
 4             get
 5             {
 6                 var config = CloudConfigurationManager.GetSetting("MappingDataFlowEventHubConsumer");
 7                 if (string.IsNullOrEmpty(config))
 8                     throw new Exception("MappingDataFlowEventHubConsumer hasn‘t configured!");
 9
10                 return config;
11             }
12         }

EventHub消费者组

在azure core中加入client.cs文件:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 using Microsoft.Azure;
 8 using Microsoft.ServiceBus;
 9 using Microsoft.ServiceBus.Messaging;
10
11 using xxx.Core.Entity;
12 using xxx.Core;
13 using xxx.Core.Interface;
14
15 namespace xxx.Core.Client
16 {
17     public class EventHubClientMapping
18     {
19         private Microsoft.ServiceBus.Messaging.EventHubClient _eventHubClient;
20
21         public EventHubClientMapping()
22         {
23             var factory = MessagingFactory.CreateFromConnectionString(DANDaasConfig.MappingDataFlowEventHubConnection);
24             _eventHubClient = factory.CreateEventHubClient(DANDaasConfig.MappingDataFlowEventHubName);
25
26             _eventHubClient.RetryPolicy = RetryPolicy.Default;
27         }
28
29         public void AddMessage(string cookie)
30         {
31             var message = new EventData(MappingNotify.Serialize(cookie));
32
33             _eventHubClient.Send(message);
34         }
35     }
36
37 }

额。。差不多了。。

时间: 2024-10-14 23:26:18

第一次将内容添加到azure event hubs的相关文章

DIV+CSS实操五:经管系网页内容模块内容添加(二)

继续接着DIV+CSS实操系列的博文添加代码:DIV+CSS实操一:经管系网页总体模块布局,DIV+CSS实操二: 经管系网页添加导航栏和友情链接栏,DIV+CSS实操三:经管系网页内容模块添加标题栏和版权信息模块和 DIV+CSS实操四:经管系网页内容模块内容添加(一).我们还是添加内容版块的内容,这一次是中间部分和右半部 分.由于中间的图片无缝滚动需要JS实现,我们后续加上. HTML代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr

[Azure] Notification Hubs注册模式

[Azure] Notification Hubs注册模式 关于Azure Notification Hubs的注册模式,可以参考下列连结的文件内容. Notification Hubs Features - Registration Management 文件里介绍了两种注册模式:手机主动注册.服务代理注册,这两个模式主要的差异点是在于,注册时的Tag信息由谁提供. 手机主动注册:注册时的Tag信息,由手机APP直接提供. 如果是一些公开发布的推播信息,可以选择手机主动注册:由手机APP自行注

将文本框内容添加到表格中的行代码实例

将文本框内容添加到表格中的行代码实例:在实际操作中,往往需要将文本框中的内容添加到表格的行中或者类似的情况,下面就通过一个实例介绍一下如何实现此效果,希望能够对需要的朋友有所帮助,代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&

Azure Event hub usage

1. create event hub on azure 2. create a prj , event hub sender, install nuget pkg - azure service bus 3. check connection string 4. sender sample code static void Main(string[] args) { Console.WriteLine("Press Ctrl-C to stop the sender process"

[转]用CSS给SVG &lt;use&gt;的内容添加样式

来源:http://www.w3cplus.com/svg/styling-svg-use-content-css.html?utm_source=tuicool&utm_medium=referral --------------------------------------------------------------------------------------------------------------------- 一篇深入探究如何给SVG<use>元素的内容添加样

用js控制按钮时间,将指定内容添加到文本域的光标所在位置。

<pre class="javascript" name="code"> var fm = document.getElementsByTagName('form')[0]; var button = document.getElementsByName("button"); //获取一个cookie的值 function getCookie(index){ var allcookies = document.cookie; var

Git第一次新建项目添加ssh key

Git第一次新建项目添加ssh key Last login: Mon Sep  3 08:59:35 on console localhost:~ dajiang$ cd ~/.ssh -bash: cd: /Users/dajiang/.ssh: No such file or directory localhost:~ dajiang$ sudo apt-get install git Password: sudo: apt-get: command not found localhost

vue把输入框的内容添加到页面(简单留言板)

文章地址:https://www.cnblogs.com/sandraryan/ vue最最最简单的demo(记得引入) 实例化一个vue,绑定#app的元素,要渲染的数组arr作为data. 把arr的item渲染到页面,输入内容点击按钮把用户输入的内容添加到页面以及数组 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&

添加事件及Event对象的兼容写法

一.事件流 事件流描述的是从页面中接受事件的顺序. IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流 1.事件冒泡 事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上转播至最不具体的节点(文档). 2.事件捕获 事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点最后接收到事件. 二.事件处理程序 1.HTML事件处理程序 2.DOM0级事件处理程序 3.DOM2级事件处理程序 DOM2级事件定义了两个方法:用于处理指定和删除事件处