商品调价队列的接收端,如果调价失败会再次调用发送端
import com.alibaba.fastjson.JSON;
import com.meishi.basic.web.modules.shop.entity.ProductsPriceAdjust;
import com.meishi.basic.web.modules.shop.service.ProductsPriceAdjustService;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import javax.jms.*;
import java.util.List;
import java.util.Map;
/**
* 商品调价监听端
*
* @author WYP
*/
public class ProductsPriceAdjustListener implements MessageListener {
protected Logger logger = LogManager.getLogger(getClass());
@Autowired
private ProductsPriceAdjustService productsPriceAdjustService;
@Override
public void onMessage(Message message) {
try {
//获取到接收的数据
String receiveMsg = ((TextMessage) message).getText();
logger.info("接收成功!" + receiveMsg);
Map receiveMap = (Map) JSON.parse(receiveMsg);
//处理业务逻辑
if (!"200".equals(receiveMap.get("status").toString())) {
String goodsId = receiveMap.get("data").toString();
ProductsPriceAdjust productsPriceAdjust = new ProductsPriceAdjust();
productsPriceAdjust.setGoodsId(goodsId);
List<ProductsPriceAdjust> list = productsPriceAdjustService.findList(productsPriceAdjust);
if (list.size() != 0) {
productsPriceAdjust = productsPriceAdjustService.findList(productsPriceAdjust).get(0);
productsPriceAdjustService.sendEntity(productsPriceAdjust);
}
}
//确认接收,并成功处理了消息
message.acknowledge();
} catch (JMSException e) {
logger.error("接收成功!" + e);
e.printStackTrace();
}
}
}
XML文件还需要如下:
<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<property name="connectionFactory" ref="connectionFactory" />
</bean>
<!-- 真正可以产生Connection的ConnectionFactory,由ActiveMQ提供 -->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="failover:tcp://192.168.3.17:61616" />
<property name="userName" value="admin" />
<property name="password" value="admin" />
<!--<!– 消息传输监听器 处理网络及服务器异常 –>-->
<!--<property name="transportListener">-->
<!--<bean class="com.meishi.basic.web.modules.api.service.ProductsPriceAdjustListener" />-->
<!--</property>-->
</bean>
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory" />
</bean>
<!--这个是队列目的地 -->
<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="item.queue.result"/>
</bean>
<!-- 消息监听器 -->
<bean id="productsPriceAdjustListener" class="com.meishi.basic.web.modules.api.service.ProductsPriceAdjustListener" />
<!-- 消息监听容器 -->
<bean id="jmsContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queueDestination" />
<property name="messageListener" ref="productsPriceAdjustListener" />
<!-- 设置固定的线程数 -->
<property name="concurrentConsumers" value="2"/>
<!-- 设置动态的线程数 -->
<property name="concurrency" value="2-5"/>
</bean>