网上有大把的例子,各种整合集成,我也照着网上的例子整合了,我想实现的是请求来了先进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;
}
}