2010-08-16 9 views
9

Gibt es eine Möglichkeit, Acknowledgements mit Spring.NET zu konfigurieren?Acknowledgments mit Spring.NET konfigurieren

In Code sieht es so wie:

var msgQ = new MessageQueue(OrdersQueueName) 
      { 
      DefaultPropertiesToSend = 
      { 
       AcknowledgeType = AcknowledgeTypes.FullReachQueue | 
           AcknowledgeTypes.FullReceive, 
       AdministrationQueue = new MessageQueue(AckQueueName) 
      } 
      }; 

Könnte es mit dem ProductTemplate getan werden? Ein anderer Weg?

Antwort

2

Für mich ist diese Konfiguration gearbeitet:

<objects xmlns="http://www.springframework.net"> 

    <!-- for http://stackoverflow.com/questions/3491152/configuring-acknowledgements-with-spring-net --> 

    <object name="orders" type="q3491152.MessageQueue, q3491152"> 
    <property name="Name" value="orders-from-xml" /> 
    <property name="DefaultPropertiesToSend"> 
     <object type="q3491152.PropertiesToSend, q3491152"> 
     <property name="AdministrationQueue" ref="anotherQ" /> 
     <property name="AcknowledgeType" 
        expression="T(q3491152.AcknowledgeTypes).FullReachQueue or T(q3491152.AcknowledgeTypes).FullReceive" /> 
     </object> 
    </property> 
    </object> 

    <object name="anotherQ" type="q3491152.MessageQueue, q3491152"> 
    <property name="Name" value="anotherQ" /> 
    </object> 

</objects> 

In diesem Beispiel habe ich die (scheinbar) verspottet relevanten Teile der msmq Klassen. Ich verwende eine expression, um einen bitweisen Vergleich auf der Enumeration zu erhalten.

Wenn Sie register the AcknowledgeType mit dem Spring.Core.TypeResolution.TypeRegistry mit TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes)); der Ausdruck vereinfacht weiter:

<property name="AcknowledgeType" 
      expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" /> 

Ich habe es mit folgendem Programm getestet, gegen Spring.NET 1.3.1:

using System; 
using Spring.Context; 
using Spring.Context.Support; 

namespace q3491152 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      IApplicationContext ctx = new XmlApplicationContext("objects.xml"); 

      var qFromCode = new MessageQueue 
           { 
            Name="orders-from-code", 
            DefaultPropertiesToSend = 
             { 
              AcknowledgeType = AcknowledgeTypes.FullReachQueue | 
                   AcknowledgeTypes.FullReceive, 
              AdministrationQueue = new MessageQueue() 
             } 
           }; 

      var qFromXml = (MessageQueue) ctx.GetObject("orders"); 

      PrintQ(qFromCode); 
      PrintQ(qFromXml); 

      Console.ReadLine(); 
     } 

     private static void PrintQ(MessageQueue q) 
     { 
      Console.WriteLine("Q: {0}; AcknowledgeType: {1}", q.Name, q.DefaultPropertiesToSend.AcknowledgeType); 
     } 
    } 

    public class MessageQueue 
    { 
     public MessageQueue() 
     { 
      DefaultPropertiesToSend = new PropertiesToSend(); 
     } 

     public string Name { get; set; } 
     public PropertiesToSend DefaultPropertiesToSend { get; set; } 
    } 


    public class PropertiesToSend 
    { 
     public AcknowledgeTypes AcknowledgeType { get; set; } 
     public MessageQueue AdministrationQueue { get; set; } 
    } 

    [Flags] 
    public enum AcknowledgeTypes 
    { 
     None = 0, 
     FullReachQueue, 
     FullReceive 
    } 
} 

Welche Ausgänge:

Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive 
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive 
Verwandte Themen