Как сделать очереди MSMQ быстрее? Есть ли пакетная отправка, так что, по крайней мере, это не 1 на 1?

У меня есть следующий код, который не так медленно, а также не так быстро. Есть ли способ улучшить это? В настоящее время я получаю 1000 сообщений за 5-10 секунд, что, на мой взгляд, пока не идеально.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <netMsmqBinding>
        <binding name="NetMsmqBinding_IProductService"
                 deadLetterQueue="System"
                 maxReceivedMessageSize="524288">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="524288"
                        maxBytesPerRead="524288"/>
          <security mode="None"/>
        </binding>
      </netMsmqBinding>
    </bindings>
    <client>
      <endpoint address="net.msmq://localhost/private/Products" binding="netMsmqBinding"
        bindingConfiguration="NetMsmqBinding_IProductService" contract="Products.IProductService"
        name="NetMsmqBinding_IProductService" />
    </client>
  </system.serviceModel>
</configuration>

Процессор не связан с ответами, пожалуйста, я имею в виду конфигурацию, как сделать это быстрее

2 ответа

Решение

В.net 4.5 вы можете использовать сжатие, но для этого потребуется полностью переписать связывание снизу вверх.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <binding name="CompressedNetMsmqBinding_IProductService"
                 >

          <binaryMessageEncoding compressionFormat="GZip" >
            <readerQuotas maxDepth="32"
                          maxStringContentLength="524288"
                          maxBytesPerRead="524288"/>
          </binaryMessageEncoding>
          <msmqTransport
                 deadLetterQueue="System"
                 maxReceivedMessageSize="524288"/>
        </binding>
      </customBinding>
    </bindings>
    <client>
      <endpoint address="net.msmq://localhost/private/Products" binding="netMsmqBinding"
        bindingConfiguration="NetMsmqBinding_IProductService" contract="Products.IProductService"
        name="CompressedNetMsmqBinding_IProductService" />
    </client>
  </system.serviceModel>
</configuration>

Если производительность - это единственное, что вы ищете и готовы пожертвовать постоянством, то я бы посоветовал вам исследовать нетранзакционные очереди памяти. У них нет накладных расходов на транзакции, и, поскольку они не сериализуются на диск, они довольно быстрые. Однако вам все равно придется иметь дело с задержкой в ​​сети, если вы находитесь в распределенной среде.

Надеюсь это поможет,

Другие вопросы по тегам