2012-03-13 30 views
6

Chúng tôi đang cố gắng sử dụng kho lưu trữ HornetQ và cơ chế chuyển tiếp ... tuy nhiên chuyển tiếp tin nhắn từ một cá thể HornetQ độc lập sang một phiên bản khác bằng cách sử dụng cây cầu lõi rất chậm. Chúng tôi đã không thể tăng tỷ lệ thông lượng trên 200 tin nhắn mỗi giây.Thông lượng rất thấp Sử dụng cầu lõi HornetQ

Thực tế đáng ngạc nhiên là nếu chúng tôi chỉ cùng một máy khách (đã xuất bản thư cho cá thể HornetQ chuyển tiếp) trực tiếp tại đích HornetQ đích, chúng tôi bắt đầu quan sát tốc độ thông lượng trên 1000 thư mỗi giây (khách hàng này là JMS dựa trên). Điều này về cơ bản có nghĩa là cây cầu chính được cấu hình giữa thể hiện Forwarding HornetQ và thể hiện đích của HornetQ là vấn đề.

Sau đây là các bộ phận liên quan để cấu hình cầu cốt lõi trên Forwarding HornetQ:

<connectors> 
      <connector name="netty-bridge"> 
       <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> 
       <param key="host" value="destination.xxx.com"/> 
       <param key="port" value="5445"/> 
       <param key="batch-delay" value="50"/> 
       <param key="tcp-send-buffer-size" value="1048576"/> 
       <param key="tcp-receive-buffer-size" value="1048576"/> 
       <param key="use-nio" value="true"/> 
      </connector> 
</connectors> 
<address-settings> 
     <address-setting match="jms.queue.Record"> 
       <dead-letter-address>jms.queue.RecordDLQ</dead-letter-address> 
       <max-size-bytes>262144000</max-size-bytes> 
       <page-size-bytes>10485760</page-size-bytes> 
       <address-full-policy>PAGE</address-full-policy> 
     </address-setting> 
</address-settings> 
<queues> 
     <queue name="jms.queue.Record"> 
        <address>jms.queue.Record</address> 
     </queue> 
</queues> 
<bridges> 
     <bridge name="core-bridge"> 
       <queue-name>jms.queue.Record</queue-name> 
       <forwarding-address>jms.queue.Record</forwarding-address> 
       <retry-interval>1000</retry-interval> 
       <retry-interval-multiplier>1.0</retry-interval-multiplier> 
       <reconnect-attempts>-1</reconnect-attempts> 
       <confirmation-window-size>10485760</confirmation-window-size> 
       <static-connectors> 
         <connector-ref>netty-bridge</connector-ref> 
       </static-connectors> 
     </bridge> 
</bridges> 

Sau đây là các bộ phận liên quan để cấu hình cầu cốt lõi trên HornetQ Điểm đến:

<acceptors> 
     <acceptor name="netty"> 
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class> 
     <param key="host" value="${hornetq.remoting.netty.host:192.168.2.xxx}"/> 
     <param key="port" value="${hornetq.remoting.netty.port:xxxx}"/> 
     <param key="tcp-send-buffer-size" value="1048576"/> 
     <param key="tcp-receive-buffer-size" value="1048576"/> 
     <param key="use-nio" value="true"/> 
     <param key="batch-delay" value="50"/> 
     <param key="use-nio" value="true"/> 
     </acceptor> 
<acceptors> 
<address-settings> 
      <address-setting match="jms.queue.Record"> 
        <dead-letter-address>jms.queue.RecordDLQ</dead-letter-address> 
        <max-size-bytes>262144000</max-size-bytes> 
        <page-size-bytes>10485760</page-size-bytes> 
        <address-full-policy>PAGE</address-full-policy> 
      </address-setting> 
    </address-settings> 
    <queues> 
      <queue name="jms.queue.Record"> 
         <address>jms.queue.Record</address> 
      </queue> 
    </queues> 

Tất cả các biến hệ thống (CPU/Memory/Disk IO/Network/etc.) Đều được sử dụng đúng mức và không có lỗi trong nhật ký.

Lưu ý: Chúng tôi đã thử với cả NIO cũng như IO cũ/cũ. Điều này đã được thử cả với HornetQ-2.2.5-Final và HornetQ-2.2.8-GA (2.2.8-GA được xây dựng từ nguồn)

Bất kỳ ý tưởng nào về những gì có thể gây ra vấn đề này và độ phân giải có thể là?

Quan sát khác: Dường như các tin nhắn đang được gửi qua cầu chính là giao dịch ... vì vậy có thể thực hiện các giao dịch này và liên lạc giữa hai cá thể HornetQ xảy ra không đồng bộ không?

+0

Đây là lỗi cố định –

Trả lời

3

OK .. Tôi đã tự tìm ra điều này.

Khi chuyển tiếp HornetQ tạo cầu nối, nó chỉ sử dụng một luồng để gửi tin nhắn qua cầu và chỉ mở một kết nối đến đích HornetQ. Như vậy, nó không thể tận dụng nhiều bộ vi xử lý và cũng bị giới hạn bởi mạng (độ trễ/băng thông/rtt) và không thể song song hiệu quả việc gửi tin nhắn. Như vậy, nếu bạn có một thông lượng cao, bạn bắt đầu nhấn một nắp (trong trường hợp của chúng tôi khoảng 200 tin nhắn mỗi giây). Bạn có thể tăng điều này bằng cách tinh chỉnh các tham số HornetQ Connector và Acceptor (giống như TCP send và receive buffer) và Bridge Settings (kích thước cửa sổ xác nhận) nhưng điều đó chỉ mất quá nhiều thời gian (chúng tôi nhận được thông lượng lên tới 300 tin nhắn mỗi giây).

Giải pháp - tạo nhiều cầu nối giữa cùng một cặp trường hợp Chuyển tiếp và Điểm đến HornetQ (liên quan đến cùng một hàng đợi). Điều này có hiệu quả song song việc truyền tải thông điệp và do đó làm tăng thông lượng. Tạo ba cây cầu gần gấp ba lần thông lượng lên 870 tin nhắn mỗi giây.

JBoss cần phải lý tưởng làm cho cấu hình song song này có thể cấu hình được trong cầu chính.

+0

Đã xảy ra lỗi tại một số điểm. Hãy nhìn vào câu trả lời của tôi. –

1

Tôi tin rằng bạn đang sử dụng phiên bản 2.2.5 (Bạn không sử dụng phiên bản bạn đang sử dụng phiên bản nào) có lỗi trên cầu gây ra sự cố bạn đang nói.

Tại một số phiên bản cây cầu đang gửi thư đồng bộ thay vì tính vào xác nhận không đồng bộ.

Hãy xem nó sẽ hoạt động như thế nào trên phiên bản mới nhất.

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