美文网首页
Spring docker redis

Spring docker redis

作者: ADADACHAN | 来源:发表于2021-07-21 10:08 被阅读0次

 1.启动方式一:docker默认启动redis

1、拉取镜像

  docker pull redis:lastest (若不使用版本号,如docker pull redis,默认拉取最新镜像)

docker pull redis

Using default tag: latest

docker pull redisUsing default tag: latestlatest: Pulling from library/redisb4d181a07f80: Pull complete86e428f79bcb: Pull completeba0d0a025810: Pull completeba9292c6f77e: Pull completeb96c0d1da602: Pull complete5e4b46455da3: Pull completeDigest: sha256:b6a9fc3535388a6fc04f3bdb83fb4d9d0b4ffd85e7609a6ff2f0f731427823e3Status: Downloaded newer imageforredis:latestdocker.io/library/redis:latest

2、启动redis server,启动时设置端口,以便外部访问

  docker run -it -d --name myredis -p 6379:6379 redis 

docker run -it -d --name myredis -p 6379:6379 redis

61cb870059af6b7da7af44065af9673dc7934ad8e6e6fec6bff81edf93b88924

  说明: -it : 让容器的标准输入保持打开,并分配一个伪终端并绑定到容器的标准输入上

      -d : 启动容器并在后台运行

创建 Redis 消息接收器


Receiver.java

package com.example.messagingredis;

import java.util.concurrent.atomic.AtomicInteger;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class Receiver {

private static final LoggerLOGGER = LoggerFactory.getLogger(Receiver.class);

    private AtomicIntegercounter =new AtomicInteger();

    public void receiveMessage(String message) {

LOGGER.info("Received <" + message +">");

        counter.incrementAndGet();

    }

public int getCount() {

return counter.get();

    }

}

定义一个MessagingRedisApplication.java

package com.example.messagingredis;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ApplicationContext;

import org.springframework.context.annotation.Bean;

import org.springframework.data.redis.connection.RedisConnectionFactory;

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

import org.springframework.data.redis.listener.PatternTopic;

import org.springframework.data.redis.listener.RedisMessageListenerContainer;

import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

@SpringBootApplication

public class MessagingRedisApplication {

private static final LoggerLOGGER = LoggerFactory.getLogger(MessagingRedisApplication.class);

  @Bean

  RedisMessageListenerContainercontainer(RedisConnectionFactory connectionFactory,

        MessageListenerAdapter listenerAdapter) {

RedisMessageListenerContainer container =new RedisMessageListenerContainer();

      container.setConnectionFactory(connectionFactory);

      container.addMessageListener(listenerAdapter, new PatternTopic("chat"));

      return container;

  }

@Bean

  MessageListenerAdapterlistenerAdapter(Receiver receiver) {

return new MessageListenerAdapter(receiver, "receiveMessage");

  }

@Bean

  Receiverreceiver() {

return new Receiver();

  }

@Bean

  StringRedisTemplatetemplate(RedisConnectionFactory connectionFactory) {

return new StringRedisTemplate(connectionFactory);

  }

public static void main(String[] args)throws InterruptedException {

ApplicationContext ctx = SpringApplication.run(MessagingRedisApplication.class, args);

      StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);

      Receiver receiver = ctx.getBean(Receiver.class);

      while (receiver.getCount() ==0) {

LOGGER.info("Sending message...");

        template.convertAndSend("chat", "\n说明:-it :让容器的标准输入保持打开,并分配一个伪终端并绑定到容器的标准输入上\n" +

"-d : 启动容器并在后台运行\n" +

"容器运行起来后,若想进入容器内部,并进行命令行操作");

        Thread.sleep(500L);

      }

System.exit(0);

  }

}

template.convertAndSend("chat","\n说明:-it :让容器的标准输入保持打开,并分配一个伪终端并绑定到容器的标准输入上\n"+"-d : 启动容器并在后台运行\n"+"容器运行起来后,若想进入容器内部,并进行命令行操作");Thread.sleep(500L);}System.exit(0);}}

在 listenerAdapter 方法中定义的 bean 在容器中定义的消息侦听器容器中注册为消息侦听器,并将侦听聊天主题上的消息。由于 Receiver 类是一个 POJO,因此需要将其包装在实现 MessageListener 接口(addMessageListener() 所需)的消息侦听器适配器中。消息侦听器适配器还配置为在消息到达时调用 Receiver 上的 receiveMessage() 方法。

连接工厂和消息侦听器容器 bean 是侦听消息所需的全部。要发送消息,您还需要一个 Redis 模板。在这里,它是一个配置为 StringRedisTemplate 的 bean,它是 RedisTemplate 的一个实现,专注于 Redis 的常见用法,其中键和值都是 String 实例。

main() 方法通过创建 Spring 应用程序上下文来启动一切。然后应用程序上下文启动消息侦听器容器,消息侦听器容器 bean 开始侦听消息。 main() 方法然后从应用程序上下文中检索 StringRedisTemplate bean 并使用它从 Redis 发送一个 "说明....."关于聊天主题的消息。最后,它关闭 Spring 应用程序上下文,应用程序结束。

运行

2021-07-15 17:00:11.828 INFO 54244 --- [ main] c.e.m.MessagingRedisApplication : Sending message...

2021-07-15 17:00:11.840  INFO 54244 --- [    container-2] com.example.messagingredis.Receiver      : Received <

说明:-it :让容器的标准输入保持打开,并分配一个伪终端并绑定到容器的标准输入上

-d : 启动容器并在后台运行

容器运行起来后,若想进入容器内部,并进行命令行操作>

Process finished with exit code 0

相关文章

网友评论

      本文标题:Spring docker redis

      本文链接:https://www.haomeiwen.com/subject/yozdmltx.html