美文网首页
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