有没有办法用Spring.NET配置Acknowledgements?
在代码中它看起来像这样:
var msgQ = new MessageQueue(OrdersQueueName)
{
DefaultPropertiesToSend =
{
AcknowledgeType = AcknowledgeTypes.FullReachQueue |
AcknowledgeTypes.FullReceive,
AdministrationQueue = new MessageQueue(AckQueueName)
}
};
Run Code Online (Sandbox Code Playgroud)
可以用ProductTemplate吗?其他方式?
对我来说,这个配置有效:
<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>
Run Code Online (Sandbox Code Playgroud)
在此示例中,我模拟了 msmq 类的(显然)相关部分。我使用表达式对枚举进行按位比较。
如果您使用 using注册,AcknowledgeType则表达式进一步简化为:Spring.Core.TypeResolution.TypeRegistryTypeRegistry.RegisterType("AcknowledgeTypes", typeof(AcknowledgeTypes));
<property name="AcknowledgeType"
expression="AcknowledgeTypes.FullReachQueue or AcknowledgeTypes.FullReceive" />
Run Code Online (Sandbox Code Playgroud)
我已经使用以下程序针对 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
}
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
Q: orders-from-code; AcknowledgeType: FullReachQueue, FullReceive
Q: orders-from-xml; AcknowledgeType: FullReachQueue, FullReceive
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |