ActiveMQ添加商品发送消息

添加商品

需要同步索引库,同步缓存,生成静态页面等等
很多地方,都需要监听添加商品的事件,所以,这里使用Topic模式

方案选择

方案一:直接写业务逻辑
在商品服务模块,添加商品的业务逻辑中,添加同步索引库的业务逻辑
缺点:业务逻辑耦合度高,业务拆分不明确

方案二:模块之间服务调用
在商品服务模块,添加商品业务逻辑服务中,调用索引服务模块,添加索引的服务,业务逻辑分开,通过服务调用
缺点:服务之间耦合度高,服务的启动有先后顺序

方案三:使用消息队列
在商品服务模块,添加商品业务逻辑中,通过消息中间件发布消息,然后索引模块中,通过监听接收消息,并添加索引
消息中间件可以使用ActiveMQ、RabbitMQ、kafka

JMSTemplate

配置信息

<!-- 配置JMSTemplate -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory"/>
</bean>
<!-- 配置消息的Destination对象 -->
<bean id="test-queue" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg name="name" value="test-queue"></constructor-arg>
</bean>
<bean id="itemAddtopic" class="org.apache.activemq.command.ActiveMQTopic">
    <constructor-arg name="name" value="item-add-topic"></constructor-arg>
</bean>

添加商品

向Activemq发送,商品添加消息

@Service
public class ItemServiceImpl implements ItemService {

    @Autowired
    private TbItemMapper itemMapper;
    @Autowired
    private TbItemDescMapper itemDescMapper;
    @Autowired
    private JmsTemplate jmsTemplate;
    @Resource(name="itemAddtopic")
    private Destination destination;

    @Override
    public TaotaoResult addItem(TbItem item, String desc) {
        //生成商品id
        final long itemId = IDUtils.genItemId();
        //补全item的属性
        item.setId(itemId);
        //商品状态,1-正常,2-下架,3-删除
        item.setStatus((byte) 1);
        item.setCreated(new Date());
        item.setUpdated(new Date());
        //向商品表插入数据
        itemMapper.insert(item);
        //创建一个商品描述表对应的pojo
        TbItemDesc itemDesc = new TbItemDesc();
        //补全pojo的属性
        itemDesc.setItemId(itemId);
        itemDesc.setItemDesc(desc);
        itemDesc.setUpdated(new Date());
        itemDesc.setCreated(new Date());
        //向商品描述表插入数据
        itemDescMapper.insert(itemDesc);
        //向Activemq发送商品添加消息
        jmsTemplate.send(destination, new MessageCreator() {

            @Override
            public Message createMessage(Session session) throws JMSException {
                //发送商品id
                TextMessage textMessage = session.createTextMessage(itemId + "");
                return textMessage;
            }
        });
        //返回结果
        return TaotaoResult.ok();
    }

}

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/81532768
今日推荐