我正在使用Spring4.3.5.Release和ActiveMQ5.14.3来处理消息队列。
<!-- Activemq connection factory -->
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<!-- brokerURL, You may have different IP or port -->
<constructor-arg index="0" value="${message.broker.url}" />
</bean>
<!-- Pooled Spring connection factory -->
<bean id="jmsConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory" />
</bean>
<!-- ======================================================= -->
<!-- JMS Send, define default destination and JmsTemplate -->
<!-- ======================================================= -->
<!-- Default Destination Queue Definition -->
<bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue">
<!-- name of the queue -->
<constructor-arg index="0" value="${default.message.queue}" />
</bean>
<bean id="jmsDestinationResolver" class="org.springframework.jms.support.destination.DynamicDestinationResolver"/>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="defaultDestination" ref="defaultDestination" />
<property name="destinationResolver" ref="jmsDestinationResolver"/>
<property name="pubSubDomain" value="${pub.sub.domain}"/>
<property name="receiveTimeout" value="${receive.timeout}"/>
</bean>
public boolean sendResponse(final MyObjectDTO myObject) {
boolean success = false;
this.jmsTemplate.convertAndSend(ebvResponse);
success = true;
return success;
}
下面是我的单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations =
{ "classpath:/spring/my-platform-services-context.xml" })
@Transactional
public class MessageUtilTest extends TestCase {
@Autowired
private MessageUtil messageUtil;
@Test
public void testConvertSendMessageToDefault() throws JsonParseException, JsonMappingException, IOException {
MyObjectDTO myObject = new ManualCoverageDTO();
myObject.setMessage(message);
boolean success = messageUtil.sendResponse(myObject);
assertEquals(true, success);
}
}
这个测试工作得很好,并且消息会正确地进入队列!
因为单元测试是事务性的,所以我希望当测试结束时,消息会从队列中回滚,但似乎并非如此。
我知道这是一个“集成”测试,因为它实际上是接触ActiveMQ服务器并将消息放入队列。
那么,我如何使这真正事务性,使我刚刚放在队列上的消息真的在它完成时回滚,我必须手动告诉这个测试回滚吗?
我已经对数据库进行了数百次“集成”单元测试,在一次测试中的每次插入、更新或删除之后,以及测试结束后,数据库将回滚到测试前的状态,我希望我的消息队列或主题也能发生同样的事情。
这方面的任何帮助都是很好的。谢谢!
您需要将JMSTemplate
上的SessionTransacted
设置为True
。
但是,请记住,除非提交测试消息,否则您将无法在任何地方接收测试消息。
我有一个spring boot JMS应用程序,它在启动期间加载多个WebShpere MQ队列,并将消息从这些队列复制到另一个队列。一切正常,但我正在开始一些单元测试,我想有几件事我不理解。因此,我有一个config类,它包含一组带注释的bean,其中一个bean是在JMSListener启动之前执行消息加载的类。我有简单单元测试: 这个测试通过了,但我只希望简单地检查我的,看看它们是否相等并完
单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet
我需要在我的应用程序中进行单元测试JMSXGroupID。有人能告诉我是否有示例文章或参考文献来实现这一点吗?我试图在ActiveMQ门户中查看参考文献,但看起来下面的Hudson链接坏了。我正在使用Spring JMS进行编程。 http://activemq.apache.org/junit-reports.html
目前我正在使用SQS-Lambda集成 Lambda的并发可用。SQS批次设置为1记录,0延迟。 SQS的可见性超时为15分钟,Lambda最大执行时间为15分钟 我会注意到,有时SQS消息在飞行中被卡住,根本没有被任何Lambda处理(它们在15分钟后落入死信队列,CloudWatch显示没有Lambda被消息调用) 有人面临过同样的问题吗? 我在VPC内部运行Lambda,如果这很重要的话
为什么已经拥有了共享内存时需要消息队列呢? 这将是多种原因,让我们将其分解为多个点来简化 - 据了解,一旦消息被一个进程接收到,它将不再可用于任何其他进程。 而在共享内存中,数据可供多个进程访问。 如果想使用小信息格式进行通信。 当多个进程同时进行通信时,共享内存数据需要同步保护。 使用共享内存的写入和读取频率很高,那么实现功能将会非常复杂。 在这种情况下不值得使用。 如果所有的进程不需要访问共享
一、消息模型 点对点 发布/订阅 二、使用场景 异步处理 流量削锋 应用解耦 三、可靠性 发送端的可靠性 接收端的可靠性 参考资料 一、消息模型 点对点 消息生产者向消息队列中发送了一个消息之后,只能被一个消费者消费一次。 发布/订阅 消息生产者向频道发送一个消息之后,多个消费者可以从该频道订阅到这条消息并消费。 发布与订阅模式和观察者模式有以下不同: 观察者模式中,观察者和主题都知道对方的存在;