Spring+ActiveMQ

网上有大把的例子,各种整合集成,我也照着网上的例子整合了,我想实现的是请求来了先进mq,然后再慢慢持久化。可这个好像我现在的水平还不能实现,那就进了controller后再放进队列,然后慢慢持久化。可网上的例子都是发送消息,接收消息,怎么才能让service层知道取出来的是CURD的哪一种呢?这个我现在也没想出来。我自己是把一个service的一个方法,比如insert当做监听器,而发送的消息和接收的消息都换成了ObjectMessage,这样就可以传递对象,对象取出来之后就直接调用dao层的方法持久化。但是!这种方法不能通用,后期改起来肯定不好改,而且配置起来也麻烦,不能将现在的项目整个转换过来。网上好多都是说在什么条件下使用mq,但都没有说在SSM项目中怎么用MQ,用在哪一层,怎么做通用的方法。希望哪位大神看到我这段话,可以不吝赐教,指点一二。

今天让我加个功能,就是判断队列里有没有这个消息,如果有的话,那就不往里存package service.impl;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.QueueBrowser;
import javax.jms.Session;

import org.springframework.jms.core.BrowserCallback;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.converter.MessageConverter;
import org.springframework.jms.support.converter.SimpleMessageConverter;
import org.springframework.stereotype.Service;

import service.MessageService;
import util.MessageUtil;

/**
* 消息统计实现类
* @Discription::
* @Company: 北京九亲文化股份有限公司
* @author 贾海林
* @date 2017年3月23日上午10:56:26
* @version Demo
*/
@Service("messageService")
public class MessageServiceImpl implements MessageService {

/**
* jms模板
*/
@Resource(name = "jmsTemplate")
private JmsTemplate jmsTemplate;
/**
* 消息统计
* @Discription::
* @param queue
* @return
*/
public MessageUtil getMessageUtil(String queue,String message) {

/*
* 判断这条消息是否已经存在了
*
* 如果用browseSelected,那就不能查看现在有多少条未消费了
*
* 所以使用browse就可以返回现在有多少条消息,以及其中有没有massage这个东西
*/
List<String> contList = jmsTemplate.browse(queue,
new BrowserCallback<List<String>>() {

public List<String> doInJms(Session session,QueueBrowser browser) throws JMSException {

MessageConverter converter = new SimpleMessageConverter();
List<String> messContentList = new ArrayList<String>();

@SuppressWarnings("unchecked")
Enumeration<Message> messageEnum = browser.getEnumeration();
while (messageEnum.hasMoreElements()) {
Message msg = messageEnum.nextElement();
String text = (String) converter.fromMessage(msg);
messContentList.add(text);
}
return messContentList;
}
});

boolean flag = true;
//如果是光查看信息,那就不会有发送的信息,所以message为null
if(null != message){

for (String text : contList) {
if(text.equals(message)){
System.out.println(text+"这条消息已经存在了");
flag = false;
}
}

}

MessageUtil msgUtil = new MessageUtil(contList.size(),flag,contList);

return msgUtil;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值