Çünkü projenin bazı verilerin itilmesi ve alınması gerekiyor, veri miktarı nispeten büyük, günde yaklaşık 3 milyon veri
Başlangıçta http post kullanarak veri gönderdim, ancak çok yavaş olduğunu ve gönderme hızının alıcı hızdan çok daha düşük olduğunu fark ettim.
Bu nedenle, uzun bir soket bağlantısı kullanarak veri almak ve itmek istiyorsanız, soket sunucusunu ve istemciyi kendiniz yazabilirsiniz, bir tane zaman kaybı olur ama iyi yapılmayabilir
Son olarak, activemq veri itmek ve almak için kullanılır
İlk olarak, üretici kodu şöyledir:
Tüketici, iki model var:
1: Sıradan abonelik, sürekli "abonelik" gerekmiyor, yani bağlanırken mesaj alabilirsiniz ve bağlanmadan önce mesaj alamazsınız, "CreateConsumer" ile 2: Kalıcı abonelik, bağlandıktan sonra, "CreateDurableConsumer" kullanarak daha önce itilmemiş verileri alabilirsiniz
CreateDurableConsumer'ın tanıtımına bağlantılar:Bağlantı girişi görünür.
Belirtilen konu için zaten mevcut olmayan bir abonelik oluşturun ve o kalıcı abonelikte bir tüketici oluşturun. Bu yöntem, mesaj seçici kullanmadan kalıcı bir abonelik oluşturur ve noLocal değeri yanlıştır. Uygulama kalıcı bir abonelik kullanır ve uygulama, aktif tüketiciler olmadığı zamanlarda yayımlanan mesajlar da dahil olmak üzere, konuyla ilgili tüm mesajları almalıdır. JMS sağlayıcısı, bu kalıcı aboneliğin kaydını tutar ve ilgili yayıncıdan gelen tüm mesajların, tüketiciye teslim edilene ve bu kalıcı abonelik tarafından süresi dolana kadar saklanmasını garanti eder.
Sürekli abonelikler, abonelikten çıkma yöntemiyle silinene kadar mesajlar biriktirmeye devam eder.
Bu yöntem yalnızca paylaşılmayan kalıcı aboneliklerde kullanılabilir. Bu yöntemle oluşturulan kalıcı abonelikler paylaşılmadan kaldırılır. Bu, aynı anda abonelikte yalnızca bir aktif (yani kapalı olmayan) bir tüketicinin bulunabileceği anlamına gelir. Buradaki "tüketici" terimi, herhangi bir istemcideki TopicSubscriber, MessageConsumer veya JMSConsumer nesnesini ifade eder.
Paylaşılmayan kalıcı abonelik, istemci tarafından belirlenen bir ad ve ayarlanması gereken bir istemci tanımlayıcısı ile tanımlanır. Daha sonra paylaşılmayan kalıcı abonelikte tüketici oluşturmak isteyen uygulamalar aynı istemci tanımlayıcısını kullanmak zorundadır.
Aynı isim ve istemci tanımlayıcıya sahip paylaşılmayan kalıcı bir abonelik zaten mevcutsa, aynı konu, mesaj seçicisi ve noLocal değeri zaten belirtilmişse ve kalıcı abonelikte zaten aktif (yani kapalı değil) bir tüketici yoksa, bu yöntem MessageConsumer'da mevcut bir kalıcı abonelik oluşturur.
Aynı isim ve istemci tanımlayıcıya sahip paylaşılmayan kalıcı bir abonelik zaten varsa ve kalıcı abonelikte zaten aktif (yani kapatılmamış) bir tüketici varsa, JMSException uygulanır.
Zaten aynı isim ve istemci tanımlayıcısına sahip ancak farklı bir konuya sahip paylaşılmayan kalıcı bir abonelik varsa, bir mesaj seçicisi veya noLocal değeri belirlenmişse ve kalıcı abonelikte zaten aktif (yani kapalı değil) bir tüketici yoksa, bu eski aboneliği iptal edip yenisini oluşturmakla eşdeğerdir.
Paylaşılan ve paylaşılmayan kalıcı abonelikler aynı isim ve istemci kimliğine sahip olmayabilir. Aynı isim ve istemci tanımlayıcısına sahip paylaşılan kalıcı abonelik zaten varsa, bir JMSException atılır.
Aynı isim ve clientID ile kalıcı abonelikler ve paylaşılan kalıcı olmayan abonelikler için bir sınır yoktur. Böyle bir abonelik tamamen ayrı olacaktır.
Bu yöntem, karşılık gelen createDurableSubscriber yöntemiyle aynıdır, ancak tüketiciyi temsil etmek için TopicSubscriber yerine MessageConsumer döndürür.
Parametre: Temalar - Geçici olmayan konu abonelikleri isim - Bu aboneliği tanımlamak için kullanılan isim Atış: InvalidDestinationException - Geçersiz bir konu belirtilmişse. IllegalStateException - Eğer misafir tanımlayıcısı ayarlanmamışsa JMSException - Oturum, dahili bir hata nedeniyle paylaşılmayan kalıcı abonelik ve MessageConsumer oluşturulamazsa Aynı isim ve istemci tanımlayıcıya sahip paylaşılmayan kalıcı bir abonelik zaten varsa ve tüketici zaten aktifse Aynı isim ve istemci tanımlayıcısına sahip paylaşılan kalıcı bir abonelik zaten varsa Sonra: JMS 2.0 IMessageConsumer CreateDurableConsumer(ITopic hedefi, dizi adı, dizi seçicisi, bool noLocal);
burada messageSelector mesaj seçicisidir; NoLocal bayrağı varsayılan olarak yanlıştır ve doğru olarak ayarlandığında, kullanıcıların yalnızca kendi bağlantılarıyla yayınlanan mesajları almasını kısıtlar; bu da yalnızca konular için geçerlidir, kuyruklar için değil. İsm, abonelik konusunun benzersiz kimliğidir ve bu parametrenin kalıcı aboneliğe abone olduğunuzda ayarlanması gerekir.
Activemq .net'in paket indirme referansına başvurması gerekiyor:Bağlantı girişi görünür.
Tam kaynak kodu indir:
Turistler, bu gönderinin gizli içeriğini görmek isterseniz lütfen Yanıt
|