के बीच Azure संचार हाय मैं क्लाउड सेवा का निर्माण कर रहा हूं जिसमें (इस पल के लिए) एक वेब और एक कार्यकर्ता भूमिका है। मेरा वांछित वर्कफ़्लो होगा: ब्राउज़र वेब भूमिका पर एक वेबएपी नियंत्रक को कॉल करता है, जो कतार (या सेवा बस) को संदेश भेजता है जिसे उसके बाद कार्यकर्ता की भूमिका द्वारा संसाधित किया जाता है। अब तक सब ठीक है। अब जब कार्यकर्ता भूमिका संदेश को संसाधित करती है तो मैं वेब भूमिका पर एक विधि को कॉल करना चाहता हूं, जो तब ब्राउज़र को संकेत देगा कि प्रसंस्करण पूरा हो गया है (सिग्नल के माध्यम से)। कृपया मुझे क्षमा करें अगर यह पूछने का सही स्थान नहीं है क्योंकि यह एक वास्तविक समस्या के बजाय "सर्वोत्तम अभ्यास" प्रश्न की तरह है।श्रमिक भूमिका और वेब भूमिका
कार्यकर्ता भूमिका अद्यतन करता है एक तालिका पंक्ति (तालिका भंडारण में) प्रगति और कार्य के पूरा होने के साथ: मैं अब तक 2 दृष्टिकोण पर विचार किया है। वेब भूमिका के लिए कोई संकेत नहीं है। ब्राउजर सीधे तालिका भंडारण (आरईएसटी एपीआई के माध्यम से) को पढ़ता है और इसलिए जानता है कि कार्य पूरा हो गया है। यह अच्छी तरह से काम करता है (मैंने पहले ही इसका परीक्षण किया है), भले ही मुझे निरंतर मतदान के दृष्टिकोण पसंद न हों और मैं "घटना-आधारित" समाधान चाहता हूं। इसके अलावा, जब ग्राहक को यह जानकारी मिल जाती है कि प्रक्रिया समाप्त हो गई है, तो उसे ऑपरेशन पूरा होने के बाद अन्य ग्राहकों (सिग्नल के माध्यम से) प्रसारित करने के लिए एक वेब एपीआई विधि को अतिरिक्त कॉल करना होगा।
(नीचे दिए गए कोड नमूना देखें) भी काम करता है (पहले से ही के रूप में अच्छी तरह से परीक्षण किया) एक साथ Interrole communication का उपयोग SignalR साथ
कोड का नमूना:
var protocol = "http";
var ipAddress = RoleEnvironment.Roles["XXX.YYY.Web"]
.Instances[0]
.InstanceEndpoints.ToArray()
.Where(ep => ep.Value.Protocol == protocol)
.First()
.Value.IPEndpoint.ToString();
var stringEndpoint = string.Format("{0}://{1}", protocol, ipAddress.ToString());
Trace.WriteLine("Retrieved endpoint address: " + stringEndpoint, "Information");
HubConnection connection = new HubConnection(stringEndpoint);
IHubProxy proxy = connection.CreateHubProxy("MyWebHub");
connection.Start().Wait();
//later...
proxy.Invoke("ProgressUpdated", clientId, progress);
मेरे सवाल यह है: वहाँ अन्य रहे हैं (बेहतर) दिशा में संवाद करने के तरीके श्रमिक भूमिका -> वेब भूमिका? यही है, जब एक कार्यकर्ता की भूमिका ने अपनी प्रसंस्करण समाप्त कर दी है तो वेब भूमिका पर एक विधि को ट्रिगर करें? वेब भूमिका पर विधि सिग्नलआर के माध्यम से सभी ग्राहकों को अपडेट प्रसारित करेगी। मैंने Event Hubs पर भी एक नज़र डाली है, लेकिन मेरी समझ के लिए इवेंट उपभोक्ता अभी भी कार्यकर्ता की भूमिका पर चलेंगे।
मुझे यह कार्यान्वयन पसंद है! पहले कभी इस पैटर्न के बारे में सोचा नहीं, और यह बहुत चिकना है। अच्छी नौकरी! – Rogala