Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将模式获取为用于在Redis PubSub中发布消息的字符串_Java_Spring Boot_Redis_Publish Subscribe_Spring Data Redis - Fatal编程技术网

Java 如何将模式获取为用于在Redis PubSub中发布消息的字符串

Java 如何将模式获取为用于在Redis PubSub中发布消息的字符串,java,spring-boot,redis,publish-subscribe,spring-data-redis,Java,Spring Boot,Redis,Publish Subscribe,Spring Data Redis,我正在使用下面的代码。模式为byte[]类型。必须将模式作为业务逻辑的字符串。有没有办法得到它!必须使发布者或订阅主题名动态 public class RedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedis = new JedisConnectionFactory(); jedis.setHostName(

我正在使用下面的代码。模式为byte[]类型。必须将模式作为业务逻辑的字符串。有没有办法得到它!必须使发布者或订阅主题名动态

public class RedisConfig {

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        JedisConnectionFactory jedis = new JedisConnectionFactory();
        jedis.setHostName("xxxxxx.redis.cache.windows.net");
        jedis.setPassword("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=");
        jedis.setPort(6379);
        return jedis;       
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));
        return template;
    }

    @Bean
    MessageListenerAdapter messageListener() {
        return new MessageListenerAdapter(new CustomerInfoSubscriber());
    }

    @Bean
    RedisMessageListenerContainer redisContainer() {
        final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(jedisConnectionFactory());       
        container.addMessageListener(messageListener(), new PatternTopic("*/*"));
        container.setTaskExecutor(Executors.newFixedThreadPool(4));
        return container;
    }

虽然为时已晚,且已在评论中提及,但我认为应将其明确,以供将来参考:

 System.out.println(new String(pattern, StandardCharsets.UTF_8));

需要在listener类中获取“testing/1”。需要这方面的帮助。假设字节数组对应一个字符串,您可以简单地使用
新字符串(字节,编码)
-如果我使用System.out.println(新字符串(模式)),我会得到“*/*”(用于注册侦听器)。但是我需要得到“testing/1”(用于发布消息)
public class CustomerInfoSubscriber implements MessageListener {    
    @Override
    public void onMessage(Message message, byte[] pattern) {
        System.out.println(" ::::: Pattern 1 is " + pattern.toString() + " ::::: ");
        System.out.println(" ::::: Pattern 2 is " + Arrays.toString(pattern) + " ::::: ");
        System.out.println("Received >> " + message +  ", " + Thread.currentThread().getName() );
    }
}
 System.out.println(new String(pattern, StandardCharsets.UTF_8));