使用Spring.NET配置确认消息

9
有没有一种方法可以使用Spring.NET配置确认信息?
在代码中看起来像这样:
var msgQ = new MessageQueue(OrdersQueueName)
           {
             DefaultPropertiesToSend =
             {
               AcknowledgeType = AcknowledgeTypes.FullReachQueue |
                                 AcknowledgeTypes.FullReceive,
               AdministrationQueue = new MessageQueue(AckQueueName)
             }
           };

能否使用 ProductTemplate 来完成?还有其他方法吗?
1个回答

2
对我来说,这个配置起作用了:
<objects xmlns="http://www.springframework.net">

  <!-- for https://dev59.com/ik_Ta4cB1Zd3GeqPD8yq -->

  <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>

在这个例子中,我模拟了 msmq 类的(显然)相关部分。我使用 表达式 对枚举进行按位比较。
如果你使用 TypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));AcknowledgeType 注册到 Spring.Core.TypeResolution.TypeRegistry 中,该表达式进一步简化为:
<property name="AcknowledgeType" 
          expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" />

我已经使用以下程序进行测试,针对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
    }
}

的输出是:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接