ActiveMQ中添加Redis组件

在上一篇文章中,用户信息通过直接查询MySQL判断,这样做效率很低,这里通过Redis进行验证

1.在conf目录下新建redis.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"  
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"
          p:max-total="10" />

    <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
          p:host-name="127.0.0.1" 
          p:port="6379" 
          p:use-pool="true">
        <constructor-arg ref="jedisPoolConfig"/>
    </bean>

    <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" 
          p:connection-factory-ref="jedisConnectionFactory">
        <property name="keySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="valueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashKeySerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
        <property name="hashValueSerializer">
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
        </property>
    </bean>

    <bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate" 
          p:connection-factory-ref="jedisConnectionFactory" 
          />
    <bean id="topic" class="org.apache.activemq.broker.region.chenk.RedisPlugin">
        <property name="redisTemplate" ref="redisTemplate"/>
    </bean>
</beans>

之后在activemq.xml的中引入(建议放在前面)

<import resource="redis.xml"/>

2.在chenk目录下添加RedisPlugin类

package org.apache.activemq.broker.region.chenk;

import org.springframework.data.redis.core.RedisTemplate;

import java.io.Serializable;

/**
 * @Author chenk
 * @create 2021/1/15 9:42
 */

public class RedisPlugin {
    private static RedisTemplate<Serializable, Object> redisTemplate;

    public RedisPlugin() {
    }

    public static RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

    public void setRedisTemplate(RedisTemplate<Serializable, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    public static Object getByKey(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    public static Object getListByKey(String key) {
        return redisTemplate.opsForList().range(key, 0, -1);
    }

    public static void put(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }
}

3.修改AuthBroker

将getUser方法改为

private String getUser(String username) {
    Object object = RedisPlugin.getByKey("TokenOf" + username);
    return object == null ? null : (String) object;
}

4.此方案需要外部生成对应的Token,这里不赘述,重启ActiveMQ即可

添加新评论