1,安装activemq
http://activemq.apache.org/download.html官网上下载
有windows和linux两种
windows的安装 :把下载的文件解压,复制到d盘中,然后打开bin里面的win64,里面有个InstallService,双击就行了,然后右键我的电脑,点击 服务和应用程序,找到
启动就行了
打开http://localhost:8161/进行登录 账号密码都是admin
2,进行配置activemq.xml
3,依赖架
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.12.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.3.4.RELEASE</version>
</dependency>
4,配置spring-jms文件
<!--activeMQ为我们提供的ConnectionFactory-->
<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://192.168.0.139:61616"/>
</bean>
<!--spring jms为我们提供的连接池-->
<bean id = "connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="targetConnectionFactory"/>
</bean>
<bean id="waitForDeleteQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg name="name" value="waitForDeleteQueue" />
</bean>
<!-- 配置jmsTemplate -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="messageConverter">
<bean class="org.springframework.jms.support.converter.SimpleMessageConverter"></bean>
</property>
</bean>
<!-- 待删除队列监听 -->
<bean id="waitForDeleteContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="destination" ref="waitForDeleteQueue"></property>
</bean>
5,在spring-context.xml里面导入spring-jms.xml文件
<!-- 引入jar包中的jms配置文件 -->
<import resource="classpath*:spring-jms.xml" />
6,在添加spu的时候创建一下监听
jmsTemplate.send(waitForDeleteQueue,(session)-> {
ObjectMessage objectMessage = session.createObjectMessage(goodsSpu.getId());
objectMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY,2*60*1000);
return objectMessage;
});
7,写一个公开的方法
public void delete(Integer id) {
GoodsSpu goodsSpu = goodsSpuMapper.selectByPrimaryKey(id);
if (("0").equals(goodsSpu.getState())){
goodsSpuMapper.deleteByPrimaryKey(id);
}
}
8,写一个WaitForDeleteListener等待删除的方法实现MessageListener监听模式
@Component("waitForPaymentListener")
public class WaitForDeleteListener implements MessageListener {
@Autowired
private WaitForDeleteListener waitForDeleteListener;
private DefaultMessageListenerContainer waitForDeleteContainer;
@Autowired
public void setWaitForEvaluateContainer(DefaultMessageListenerContainer waitForDeleteContainer) {
this.waitForDeleteContainer = waitForDeleteContainer;
waitForDeleteContainer.setMessageListener(waitForDeleteListener);
}
@Autowired
private GoodsSpuService goodsSpuService;
@Override
public void onMessage(Message message) {
try {
Integer id = (Integer) ((ObjectMessage) message).getObject();
goodsSpuService.delete(id);
System.out.println("消费了一条消息 id是"+id);
} catch (JMSException e) {
e.printStackTrace();
}
}
这个项目启动就开始监听了,创建一个spu时,activemq就开始监听这条信息,等时间到了之后,自动删除