2012-05-03 37 views
7

Tôi đang cố gắng tìm hiểu cách thức phát đa hướng hoạt động trong MSMQ nhưng tôi không thể nhận tin nhắn nào cả, ngay cả từ cùng một máy. Tôi rõ ràng đang làm điều gì đó sai nhưng không thể nhìn thấy gì.MSMQ - Không thể nhận được từ hàng đợi Multicast

Đây là nơi tôi tại địa chỉ:

tôi tự tạo ra một hàng đợi riêng không giao dịch được gọi là MulticastTest và sau đó thiết lập địa chỉ Multicast để 234.1.1.1:8001. Sau đó, ứng dụng gửi thử nghiệm của tôi thực hiện điều này:

MessageQueue queue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001"); 
queue.Send("Hello World"); 

Tác vụ này, ít nhất dường như gửi thư mà tôi thấy trong hàng đợi đi trên cùng một máy. Ít nhất tôi cho rằng điều này là chính xác, xin vui lòng cho tôi biết nếu nó không phải là.

Vì vậy, bây giờ tôi thử và chạy ứng dụng nhận của mình (trên cùng một máy hoặc một máy khác được định cấu hình cho cùng một địa chỉ phát đa hướng) và tôi không thể làm cho nó hoạt động. Nếu tôi cố gắng này:

MessageQueue queue = new MessageQueue("FormatName:MULTICAST=234.1.1.1:8001"); 
var message = queue.Receive(); 

Nó chỉ đơn giản sẽ không làm việc, phương pháp Receive() ném một ngoại lệ nói:

Tên định dạng cụ thể không hỗ trợ các hoạt động yêu cầu. Ví dụ, một tên định dạng hàng đợi trực tiếp có thể không bị xóa

Nếu tôi cố gắng và thiết lập hàng đợi nhận như .\private$\MulticastTest nó ít nhất chờ đợi một bức thư nhưng không có gì xảy ra, tất cả các thư vẫn ở lại trong hàng đợi đi.

Vì vậy, tôi đang làm gì sai? Có một số loại dịch vụ cần phải chạy cho MSMQ để gửi tin nhắn từ hàng đợi gửi đi không?

Tôi cũng đã thử cấp toàn quyền cho NGƯỜI DÙNG ANONYMOUS theo this question nhưng điều đó không ảnh hưởng.

Trả lời

8

Sau nhiều thử nghiệm, cuối cùng tôi đã tìm ra các bước chính xác mà tôi cần để có được hàng đợi đa hướng hoạt động.

Đầu tiên và trước hết, hãy đảm bảo bạn đã cài đặt tính năng Đa phương tiện MSMQ! Mặc dù có thể tạo ra một hàng đợi với một địa chỉ multicast trên một trong các máy chủ của tôi, Server Manager thực sự đã nói với tôi rằng thành phần không được cài đặt.

Sau khi cố gắng này ra trên máy tính địa phương của tôi thay vào đó tôi tìm thấy bài viết này trong bản ghi sự kiện của tôi:

Message Queuing tìm thấy nhiều địa chỉ IP cho máy tính cục bộ. Tin nhắn xếp hàng sẽ sử dụng địa chỉ IP mặc định được xác định bởi trình điều khiển PGM cho các tin nhắn đa hướng. Để sử dụng một địa chỉ IP khác nhau, thiết lập \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSMQ \ Parameters \ MulticastBindIP registry giá trị đến một trong các địa chỉ IP hợp lệ sau: [địa chỉ IP được liệt kê ở đây]

Hóa ra tôi có nhiều địa chỉ IP cho mạng cục bộ của tôi, vì vậy trước tiên tôi đã thêm khóa đăng ký này bằng địa chỉ IP chính xác cần thiết để gửi thư và sau đó khởi động lại dịch vụ Xếp hàng thư.Bạn có thể tìm thêm chi tiết tại đây: https://technet.microsoft.com/en-us/library/cc770813%28v=ws.10%29.aspx?f=255&MSPPError=-2147217396

Tiếp theo tôi phải thêm quyền vào hàng đợi thư của mình cho người dùng ANONYMOUS LOGON, vì vậy tôi đã cấp (tối thiểu) Nhận và gửi quyền.

Bây giờ để gửi một cái gì đó. Định dạng đúng của tên hàng đợi bạn cần như sau:

FormatName:MULTICAST=234.1.1.1:8001 

hoặc bất kỳ địa chỉ IP/cổng multicast của bạn là gì. Ứng dụng gửi của tôi giờ đây đã gửi đi thông báo và tôi có thể thấy rằng nó hiện xuất hiện trong hàng đợi riêng tư của tôi được gắn với địa chỉ multicast này. Điều này có nghĩa là tin nhắn đã được gửi đi.

Trên cuối tiếp nhận, tôi cần phải nghe hàng đợi tin (không phải là định dạng multicast trên), vì vậy tôi nghe trên:

.\private$\MulticastTest 

Cuối cùng tôi nhìn thấy thông điệp mà tôi gửi xuất hiện vào cuối nhận. Khi kiểm tra tính chính xác, tôi thiết lập một hàng đợi khác trỏ đến cùng một địa chỉ multicast (đảm bảo trên máy đó tôi đã làm theo các bước tương tự ở trên) và bây giờ có thể gửi tin nhắn từ một máy và nhận được nhiều máy.

Tôi hy vọng câu trả lời này sẽ giúp ích cho người khác vì đó là nỗ lực thử và thực sự thực sự đối với tôi.

+0

Hi Peter, tôi theo các bước sau vẫn tôi vẫn chưa thể nhận được thông báo trong máy khác nhau, nó hoạt động tốt trong cùng một máy, tôi thấy thông báo đó trong bản ghi sự kiện, nó đã gợi ý 2 IP trong tin nhắn, tôi đã thêm khóa với IP đó –

+0

Liên kết kỹ thuật đã chết. Bạn có thể cập nhật hoặc xóa nó? –

+1

@SeanB thay thế liên kết với người khác, hy vọng truyền tải thông tin phù hợp, nó đã được khá lâu rồi! –

0

tôi giải quyết cùng một vấn đề của tôi bằng cách khác:

  1. Tạo hàng đợi riêng với địa chỉ multicast.
  2. Tạo hàng đợi trong sản xuất bởi tiếp theo

    const string QUEUE_PATH = @ "formatname: Multicast = 234.1.1.1: 8001"

    MessageQueue mq = new MessageQueue (QUEUE_PATH)

  3. Tạo hàng đợi người tiêu dùng tiếp theo (mỗi người tiêu dùng có tên khác nhau!):

consumer1: ". \ Private $ \ MSMQ-Task3-Consumer-1"

const string QUEUE_PATH = @;

MessageQueue mq =! MessageQueue.Exists (QUEUE_PATH)? MessageQueue.Create (QUEUE_PATH): MessageQueue mới (QUEUE_PATH);

mq.MulticastAddress = "234.1.1.1:8001";

consumer2: ". \ Private $ \ MSMQ-Task3-Consumer-2"

const string QUEUE_PATH = @;

MessageQueue mq =! MessageQueue.Exists (QUEUE_PATH)? MessageQueue.Create (QUEUE_PATH): MessageQueue mới (QUEUE_PATH);

mq.MulticastAddress = "234.1.1.1: 8001" ;

Nguồn có thể được tìm thấy ở đây: https://github.com/constructor-igor/TechSugar/tree/master/MessageQueue

ngắn Cài đặt lời giải thích có thể được tìm thấy: https://github.com/constructor-igor/TechSugar/wiki/MessageQueue

Các vấn đề liên quan