Aracılığıyla paylaş


Bağlantı sorunlarını giderme - Azure Event Hubs

İstemci uygulamalarının bir olay hub'ına bağlanamamasının çeşitli nedenleri vardır. Bağlantı sorunları kalıcı veya geçici olabilir.

Sorun sürekli gerçekleşirse (kalıcı), bu makaledeki Kalıcı bağlantı sorunlarını giderme bölümünde belirtilen bu ayarları ve diğer seçenekleri denetleyin.

  • Connection string
  • Kuruluşunuzun güvenlik duvarı ayarları
  • Güvenlik duvarı ayarları
  • Ağ güvenlik ayarları (hizmet uç noktaları, özel uç noktalar vb.) ve daha fazlası

Geçici sorunlar için, sorunları gidermeye yardımcı olabilecek aşağıdaki seçenekleri deneyin. Daha fazla bilgi için bkz . Geçici bağlantı sorunlarını giderme.

  • SDK'nın en son sürümüne yükseltme
  • Bırakılan paketleri denetlemek için komutları çalıştırma
  • Ağ izlemelerini alın.

Kalıcı bağlantı sorunlarını giderme

Uygulama olay hub'ına hiç bağlanamıyorsa sorunu gidermek için bu bölümdeki adımları izleyin.

Hizmet kesintisi olup olmadığını denetleyin

Azure hizmet durumu sitesinde Azure Event Hubs hizmet kesintisini denetleyin.

bağlantı dizesi doğrulama

Kullandığınız bağlantı dizesi doğru olduğundan emin olun. Azure portalı, CLI veya PowerShell kullanarak bağlantı dizesi almak için bkz. bağlantı dizesi alma.

Kafka istemcileri için producer.config veya consumer.config dosyalarının düzgün yapılandırıldığını doğrulayın. Daha fazla bilgi için bkz . Event Hubs'da Kafka ile ileti gönderme ve alma.

Olayları göndermek ve almak için hangi protokolleri kullanabilirim?

Üreticiler veya gönderenler bir olay hub'ına olay göndermek için Gelişmiş Mesajlaşma Kuyruğa Alma Protokolü (AMQP), Kafka veya HTTPS protokollerini kullanabilir.

Tüketiciler veya alıcılar bir olay hub'ından olay almak için AMQP veya Kafka kullanır. Event Hubs yalnızca tüketicilerin olay alması için çekme modelini destekler. Olay hub'ından olayları işlemek için olay işleyicileri kullandığınızda bile, olay işlemcisi olay hub'ından olay almak için çekme modelini dahili olarak kullanır.

AMQP

Azure Event Hubs'a olay göndermek ve olay almak için AMQP 1.0 protokolunu kullanabilirsiniz. AMQP, hem olay gönderme hem de alma için güvenilir, performanslı ve güvenli iletişim sağlar. Bunu yüksek performanslı ve gerçek zamanlı akış için kullanabilirsiniz ve çoğu Azure Event Hubs SDK'sı tarafından desteklenir.

HTTPS/REST API

Olayları yalnızca HTTP POST isteklerini kullanarak Event Hubs'a gönderebilirsiniz. Event Hubs, HTTPS üzerinden olay almayı desteklemez. Doğrudan TCP bağlantısının mümkün olmadığı basit istemciler için uygundur.

Apache Kafka

Azure Event Hubs,Kafka üreticilerini ve tüketicilerini destekleyen yerleşik bir Kafka uç noktasına sahiptir. Kafka kullanılarak oluşturulan uygulamalar, Olay Hub'larından herhangi bir kod değişikliği olmadan olay gönderip almak için Kafka protokollerini (sürüm 1.0 veya üzeri) kullanabilir.

Azure SDK'ları, temel alınan iletişim protokollerini soyutlar ve C#, Java, Python, JavaScript gibi dilleri kullanarak Event Hubs'dan olay gönderip almak için basitleştirilmiş bir yol sağlar.

Güvenlik duvarında hangi bağlantı noktalarını açmam gerekiyor?

Olayları göndermek ve almak için Azure Event Hubs ile aşağıdaki protokolleri kullanabilirsiniz:

  • Gelişmiş Message Queuing Protokolü 1.0 (AMQP)
  • Aktarım Katmanı Güvenliği (HTTPS) ile Köprü Metni Aktarım Protokolü 1.1
  • Apache Kafka

Azure Event Hubs ile iletişim kurmak için bu protokolleri kullanmak üzere açmanız gereken giden bağlantı noktaları için aşağıdaki tabloya bakın.

Protokol Bağlantı Noktaları Ayrıntılar
AMQP 5671 ve 5672 Bkz. AMQP protokol kılavuzu
HTTPS 443 Bu bağlantı noktası HTTP/REST API ve AMQP-over-WebSockets için kullanılır.
Kafka 9093 Bkz. Kafka uygulamalarından Event Hubs kullanma

HTTPS bağlantı noktası, istemci SDK'ları tarafından gerçekleştirilen çeşitli yönetim işlemleri ve Microsoft Entra ID'den belirteçlerin alınması (kullanıldığında) HTTPS üzerinden çalıştırıldığından, 5671 numaralı bağlantı noktası üzerinden AMQP kullanıldığında da giden iletişim için gereklidir.

Resmi Azure SDK'ları genellikle Event Hubs'dan olay göndermek ve almak için AMQP protokollerini kullanır. AMQP-over-WebSockets protokol seçeneği, HTTP API'sinde olduğu gibi TCP 443 bağlantı noktası üzerinden çalışır, ancak aksi takdirde işlevsel olarak düz AMQP ile aynıdır. Bu seçenek, ekstra el sıkışma gidiş dönüşleri ve HTTPS bağlantı noktasının paylaşılması için biraz daha fazla ek yük nedeniyle daha yüksek ilk bağlantı gecikme süresine sahiptir. Bu mod seçilirse, iletişim için 443 numaralı TCP bağlantı noktası yeterlidir. Aşağıdaki seçenekler düz AMQP veya AMQP WebSockets modunun seçilmesine izin verir:

Dil Seçenek
.NET EventHubsTransportType.AmqpTcp veya EventHubsTransportType.AmqpWebSockets ile EventHubConnectionOptions.TransportType özelliği
Java com.microsoft.azure.eventhubs.EventProcessorClientBuilder.transporttype with AmqpTransportType.AMQP veya AmqpTransportType.AMQP_WEB_SOCKETS
Düğüm EventHubConsumerClientOptions'ın bir webSocketOptions özelliği vardır.
Python TransportType.Amqp veya TransportType.AmqpOverWebSocket ile EventHubConsumerClient.transport_type

Hangi IP adreslerine izin vermeliyim?

Azure ile çalışırken, bazen şirket güvenlik duvarınızdaki veya ara sunucunuzdaki belirli IP adresi aralıklarına veya URL'lere kullandığınız veya kullanmaya çalıştığınız tüm Azure hizmetlerine erişmesine izin vermek zorunda olursunuz. Event Hubs tarafından kullanılan IP adreslerinde trafiğe izin verildiğini doğrulayın. Azure Event Hubs tarafından kullanılan IP adresleri için bkz . Azure IP Aralıkları ve Hizmet Etiketleri - Genel Bulut.

Ayrıca, ad alanınızın IP adresine izin verildiğini doğrulayın. Bağlantılarınıza izin vermek üzere doğru IP adreslerini bulmak için şu adımları izleyin:

  1. Bir komut isteminden aşağıdaki komutu çalıştırın:

    nslookup <YourNamespaceName>.servicebus.windows.net
    
  2. içinde Non-authoritative answerdöndürülen IP adresini not edin.

Eski bir kümede barındırılan bir ad alanı kullanıyorsanız (Cloud Services tabanlı - *.cloudapp.net ile biten CNAME) ve ad alanı alanlar arası yedekliyse, birkaç ek adımı izlemeniz gerekir. Ad alanınız daha yeni bir kümedeyse (Sanal Makine Ölçek Kümesine göre - *.cloudapp.azure.com ile biten CNAME) ve alanlar arası yedekli ise aşağıdaki adımları atlayabilirsiniz.

  1. İlk olarak, ad alanında nslookup çalıştırırsınız.

    nslookup <yournamespace>.servicebus.windows.net
    
  2. Aşağıdaki biçimlerden birinde yer alan yetkili olmayan yanıt bölümündeki adı not edin:

    <name>-s1.cloudapp.net
    <name>-s2.cloudapp.net
    <name>-s3.cloudapp.net
    
  3. S1, s2 ve s3 sonekleri olan her biri için nslookup komutunu çalıştırarak üç kullanılabilirlik alanında çalışan üç örneğin de IP adreslerini alın,

    Not

    Komut tarafından nslookup döndürülen IP adresi statik bir IP adresi değildir. Ancak, temel alınan dağıtım silinene veya farklı bir kümeye taşınana kadar sabit kalır.

Hangi istemci IP'leri ad alanıma olay gönderiyor veya ad alanımdan olay alıyor?

İlk olarak, ad alanında IP filtrelemeyi etkinleştirin.

Ardından, Tanılama günlüklerini etkinleştirme başlığındaki yönergeleri izleyerek Event Hubs sanal ağ bağlantısı olayları için tanılama günlüklerini etkinleştirin. Bağlantının reddedildiği IP adresini görürsünüz.

{
    "SubscriptionId": "0000000-0000-0000-0000-000000000000",
    "NamespaceName": "namespace-name",
    "IPAddress": "1.2.3.4",
    "Action": "Deny Connection",
    "Reason": "IPAddress doesn't belong to a subnet with Service Endpoint enabled.",
    "Count": "65",
    "ResourceId": "/subscriptions/0000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.eventhub/namespaces/namespace-name",
    "Category": "EventHubVNetConnectionEvent"
}

Önemli

Sanal ağ günlükleri yalnızca ad alanı belirli IP adreslerinden (IP filtresi kuralları) erişime izin veriyorsa oluşturulur. Bu özellikleri kullanarak ad alanınıza erişimi kısıtlamak istemiyorsanız ve yine de Event Hubs ad alanına bağlanan istemcilerin IP adreslerini izlemek için sanal ağ günlükleri almak istiyorsanız, şu geçici çözümü kullanabilirsiniz: IP filtrelemeyi etkinleştirin ve adreslenebilir toplam IPv4 aralığını (128.0.0.0/10.0.0.0/1 - ) ve IPv6 aralığını (::/1 - 8000::/1) ekleyin.

Not

Şu anda tek bir iletinin veya olayın kaynak IP'sini belirlemek mümkün değildir.

Ağ güvenlik gruplarınızda Event Hubs hizmet etiketine izin verildiğini doğrulayın

Uygulamanız bir alt ağ içinde çalışıyorsa ve ilişkili bir ağ güvenlik grubu varsa İnternet'e giden trafiğe izin verilip verilmediğini veya Event Hubs hizmet etiketine (EventHub) izin verilip verilmediğini onaylayın. Bkz. Sanal ağ hizmet etiketleri ve araması.EventHub

Uygulamanın sanal ağın belirli bir alt ağında çalıştırılması gerekip gerekmediğini denetleyin

Uygulamanızın ad alanına erişimi olan bir sanal ağ alt ağında çalıştığını onaylayın. Değilse, uygulamayı ad alanına erişimi olan alt ağda çalıştırın veya uygulamanın çalıştığı makinenin IP adresini IP güvenlik duvarına ekleyin.

Bir olay hub'ı ad alanı için sanal ağ hizmet uç noktası oluşturduğunuzda, ad alanı yalnızca hizmet uç noktasına bağlı alt ağdan gelen trafiği kabul eder. Bu davranışın bir istisnası vardır. Olay hub'ına genel uç noktaya erişimi etkinleştirmek için IP güvenlik duvarına belirli IP adresleri ekleyebilirsiniz. Daha fazla bilgi için bkz . Ağ hizmeti uç noktaları.

Ad alanınızın IP Güvenlik Duvarı ayarlarını denetleyin

Uygulamanın üzerinde çalıştığı makinenin genel IP adresinin IP güvenlik duvarı tarafından engellenmediğinden emin olun.

varsayılan olarak, istek geçerli kimlik doğrulaması ve yetkilendirme ile birlikte geldiği sürece Event Hubs ad alanlarına İnternet'ten erişilebilir. IP güvenlik duvarı ile, bunu yalnızca CIDR (Sınıfsız Etki Alanları Arası Yönlendirme) gösterimindeki bir dizi IPv4 veya IPv6 adresi veya adres aralığıyla kısıtlayabilirsiniz.

IP güvenlik duvarı kuralları Event Hubs ad alanı düzeyinde uygulanır. Bu nedenle, kurallar desteklenen herhangi bir protokolü kullanan istemcilerden gelen tüm bağlantılar için geçerlidir. Event Hubs ad alanında izin verilen bir IP kuralıyla eşleşmeyen bir IP adresinden yapılan tüm bağlantı girişimleri yetkisiz olarak reddedilir. Yanıtta IP kuralından bahsedilmez. IP filtresi kuralları sırayla uygulanır ve IP adresiyle eşleşen ilk kural kabul etme veya reddetme eylemini belirler.

Daha fazla bilgi için bkz . Azure Event Hubs ad alanı için IP güvenlik duvarı kurallarını yapılandırma. IP filtreleme, sanal ağ veya sertifika zinciri sorunlarınız olup olmadığını denetlemek için bkz . Ağ ile ilgili sorunları giderme.

Ad alanına yalnızca özel uç nokta kullanılarak erişilip erişilmediğini denetleyin

Event Hubs ad alanı yalnızca özel uç nokta üzerinden erişilebilir olacak şekilde yapılandırılmışsa, istemci uygulamasının özel uç nokta üzerinden ad alanına eriştiğini onaylayın.

Azure Özel Bağlantı hizmeti, sanal ağınızdaki özel bir uç nokta üzerinden Azure Event Hubs'a erişmenizi sağlar. Bir özel uç nokta, sizi Azure Özel Bağlantı ile desteklenen bir hizmete özel olarak ve güvenle bağlayan bir ağ arabirimidir. Özel uç nokta, sanal ağınızdan bir özel IP adresi kullanarak hizmeti etkili bir şekilde sanal ağınıza getirir. Hizmete giden tüm trafik özel uç nokta üzerinden yönlendirilebilir, bu nedenle ağ geçitleri, NAT cihazları, ExpressRoute veya VPN bağlantıları veya genel IP adresleri gerekmez. Sanal ağınız ve hizmet arasındaki trafik, Microsoft omurga ağı üzerinden geçer ve genel İnternet’ten etkilenme olasılığı ortadan kaldırılır. Bir Azure kaynağının örneğine bağlanarak erişim denetiminde en yüksek ayrıntı düzeyini sağlayabilirsiniz.

Daha fazla bilgi için bkz . Özel uç noktaları yapılandırma. Özel uç noktanın kullanıldığını onaylamak için Özel uç nokta bağlantısının çalıştığını doğrulama bölümüne bakın.

Event Hubs ile ilgili ağ ile ilgili sorunları gidermek için şu adımları izleyin:

veya wget https://<yournamespacename>.servicebus.windows.net/konumuna gidin. IP filtreleme, sanal ağ veya sertifika zinciri sorunlarınız olup olmadığını denetlemeye yardımcı olur (en yaygın olarak Java SDK'sı kullanılırken).

Başarılı ileti örneği:

<feed xmlns="http://www.w3.org/2005/Atom"><title type="text">Publicly Listed Services</title><subtitle type="text">This is the list of publicly-listed services currently available.</subtitle><id>uuid:27fcd1e2-3a99-44b1-8f1e-3e92b52f0171;id=30</id><updated>2019-12-27T13:11:47Z</updated><generator>Service Bus 1.1</generator></feed>

Hata hata iletisi örneği:

<Error>
    <Code>400</Code>
    <Detail>
        Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:b786d4d1-cbaf-47a8-a3d1-be689cda2a98_G22, SystemTracker:NoSystemTracker, Timestamp:2019-12-27T13:12:40
    </Detail>
</Error>

Geçici bağlantı sorunlarını giderme

Aralıklı bağlantı sorunlarıyla karşılaşıyorsanız sorun giderme ipuçları için aşağıdaki bölümleri inceleyin.

İstemci SDK'sının en son sürümünü kullanma

Geçici bağlantı sorunlarından bazıları, SDK'nın sonraki sürümlerinde kullandığınızdan daha uzun bir süre düzeltilmiş olabilir. Uygulamalarınızda istemci SDK'larının en son sürümünü kullandığınızdan emin olun. SDK'lar yeni/güncelleştirilmiş özellikler ve hata düzeltmeleri ile sürekli iyileştirildiğinden her zaman en son paketle test edin. Düzelten sorunlar ve eklenen/güncelleştirilen özellikler için sürüm notlarını denetleyin.

İstemci SDK'ları hakkında bilgi için Azure Event Hubs - İstemci SDK'ları makalesine bakın.

Bırakılan paketleri denetlemek için komutunu çalıştırın

Aralıklı bağlantı sorunları olduğunda, bırakılan paket olup olmadığını denetlemek için aşağıdaki komutu çalıştırın. Bu komut, hizmetle her 1 saniyede bir 25 farklı TCP bağlantısı kurmaya çalışır. Ardından bunların kaç tanesinin başarılı/başarısız olduğunu denetleyebilir ve TCP bağlantısı gecikme süresini görebilirsiniz. Aracı buradan indirebilirsinizpsping.

.\psping.exe -n 25 -i 1 -q <yournamespacename>.servicebus.windows.net:5671 -nobanner     

, pinggibi tncbaşka araçlar kullanıyorsanız eşdeğer komutları kullanabilirsiniz.

Önceki adımlar wireshark gibi araçları kullanarak yardımcı olmazsa ve çözümlemiyorsa bir ağ izlemesi alın. Gerekirse Microsoft Desteği ile iletişime geçin.

Hizmet yükseltmeleri/yeniden başlatmaları

Arka uç hizmeti yükseltmeleri ve yeniden başlatmaları nedeniyle geçici bağlantı sorunları oluşabilir. Bunlar oluştuğunda aşağıdaki belirtileri görebilirsiniz:

  • Gelen iletilerde/isteklerde bir düşüş olabilir.
  • Günlük dosyası hata iletileri içerebilir.
  • Uygulamaların hizmetle bağlantısı birkaç saniyeliğine kesilebilir.
  • İstekler kısa süre kısıtlanabilir.

Uygulama kodu SDK kullanıyorsa, yeniden deneme ilkesi zaten yerleşik ve etkindir. Uygulama/iş akışı üzerinde önemli bir etki olmadan yeniden bağlanır. Bu geçici hataları yakalamak, geri almak ve ardından çağrıyı yeniden denemek kodunuzun bu geçici sorunlara dayanıklı olmasını sağlar.

Sonraki adımlar

Aşağıdaki makalelere bakın: