`
xiangdong_li
  • 浏览: 7379 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

Redis Spring 信息通道

阅读更多

服务器端:

    /**
     * 进入通道
     * @param channel 通道名称
     * @param message 序列化数据(byte数组)
     */
    @Override
    public void sendMessage(String channel, Serializable message) {
        redisTemplate.convertAndSend(channel, message);
    }

 客户端:

        配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:redis="http://www.springframework.org/schema/redis"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
	http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd
	http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
	http://www.springframework.org/schema/redis http://www.springframework.org/schema/redis/spring-redis-1.0.xsd"
	default-lazy-init="false">
	<description>jedis Configuration</description>
	
	<!-- Redis配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${redis.pool.maxTotal}" />
		<property name="maxIdle" value="${redis.pool.maxIdle}" />
		<property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}" />
		<property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}" />
		<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
	</bean>

	<!-- Redis工厂 -->
	<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="hostName" value="${redis.ip}" />
		<property name="port" value="${redis.port}" />
		<property name="poolConfig" ref="jedisPoolConfig" />
	</bean>

	<!-- Spring自带Redis工厂 -->
	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" p:connection-factory-ref="jedisConnectionFactory" />

	<!-- 实现类 -->
	<bean id="messageDelegateListener" class="com.fgoods.siteanalyzer.main.listener.impl.MessageDelegateListenerImpl" ></bean>

	<!-- 序列化工具 -->
	<bean id="serialization" class="com.fgoods.siteanalyzer.main.listener.JSONRedisSerializer" />

	<!-- 监听器 -->
	<bean id="messageListener" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
		<property name="delegate" ref="messageDelegateListener" />
		<property name="serializer" ref="serialization" />
	</bean>

	<!-- Redis通道 -->
	<bean id="redisContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
		<property name="connectionFactory" ref="jedisConnectionFactory" />
		<property name="messageListeners">
			<map>
				<entry key-ref="messageListener">
					<bean class="org.springframework.data.redis.listener.ChannelTopic">
						<constructor-arg value="bifilter" />   <!-- 这里配置消费端需要订阅的频道,可以是多个。该一例子订阅JAVA这个频道 -->
					</bean>
				</entry>
			</map>
		</property>
	</bean>
</beans>

 代码:

package com.fgoods.siteanalyzer.main.listener.impl;

import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.scheduling.annotation.Async;

/**
 * @author LiXiangDong
 * 
 */
public class MessageDelegateListenerImpl implements MessageListener {
	
	private Converter<byte[], Object> deserializer = new DeserializingConverter();
	
	@Override
	public void onMessage(Message message, byte[] pattern) {
		
		byte[] obj = (byte[]) deserializer.convert(message.getBody());
		
		//解析数据入库
		analytical(new String(obj));
	}
	
	/**
	 * 解析数据,并将数据入库
	 * @param source
	 */
	@Async
	private void analytical(String source) {
		//解析数据
	}
	
}

  序列化工具:

package com.fgoods.siteanalyzer.main.listener;

import org.hibernate.type.SerializationException;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;

/**
 * @author LiXiangDong
 * 
 */
public class JSONRedisSerializer implements RedisSerializer<Object> {
	
	private Converter<Object, byte[]> serializer = new SerializingConverter();
	private Converter<byte[], Object> deserializer = new DeserializingConverter();

	public Object deserialize(byte[] bytes) {
		if (null == bytes || bytes.length == 0) {
			return null;
		}

		try {
			return deserializer.convert(bytes);
		} catch (Exception ex) {
			throw new SerializationException("Cannot deserialize", ex);
		}
	}

	public byte[] serialize(Object object) {
		if (object == null) {
			return new byte[0];
		}
		try {
			return serializer.convert(object);
		} catch (Exception ex) {
			throw new SerializationException("Cannot serialize", ex);
		}
	}
}

 

分享到:
评论

相关推荐

    Redis 和 spring 的整合

    此外,Spring还支持使用RedisTemplate进行更底层的操作,例如直接执行命令、操作通道等。Spring Data Redis的另一个重要特性是支持Spring Cache,可以很方便地将缓存逻辑集成到Spring MVC的控制器中,实现方法级别的...

    spring-boot+kafka+hibernate+redis示例

    在本示例中,我们将探讨如何整合Spring Boot、Kafka、Hibernate和Redis这四个关键的技术组件,构建一个高效、可扩展的应用系统。Spring Boot简化了Java应用的开发过程,Kafka是一个分布式消息中间件,Hibernate是...

    springboot与redis结合的实战、实例项目

    此外,Spring Boot还支持使用Redis进行消息订阅/发布,通过`RedisMessageListenerContainer`和`SimpleMessageListenerContainer`监听Redis通道,实现实时通信功能。 本项目提供的"spring-boot-redis"包含了一个完整...

    简单易懂的SpringBoot+Redis整合源码

    此外,SpringBoot还支持使用Redis作为消息通道,实现发布/订阅功能。通过`RedisMessageBroker`和`@MessageMapping`注解,可以实现基于Redis的消息通信。 在实际应用中,Redis常被用作缓存,SpringBoot提供了`...

    springcloud微服务技术栈-个人笔记文档(基础篇)

    例如,当订单服务需要查询用户信息时,会通过 RestTemplate 调用用户服务的接口。为了消除硬编码的 URL,服务消费者(如 order-service)会通过 Eureka 的服务发现功能找到服务提供者(如 user-service)的实例地址...

    分布式开发项目spring+SpringMVc+mybatis+dubbo+redis+netty

    在本项目中,Redis可能被用来存储会话信息、缓存热点数据,提高系统响应速度,减轻数据库压力。 6. **Netty**:Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端...

    spring integration reference 4

    - **MessagingChannels**:在 Spring Integration 中,消息通道可以是轮询类型的,也可以是可订阅类型的。轮询通道通常与 PollableMessageSource 配合使用,等待消息的到来;可订阅通道则与 ...

    css-integration_springintegration_DEMO_

    1. **配置Redis连接**:首先,你需要在Spring配置文件中设置Redis连接信息,包括服务器地址、端口、密码等,以便Spring Integration能够连接到Redis实例。 2. **创建RedisTemplate**:为了与Redis进行交互,我们...

    Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新(2.自动动态刷新).zip

    spring cloud bus能管理和传播分布式系统间的消息,就像分布式执行器,可用于广播状态更改、时间推送等,也可以当做微服务间的通信通道 spring cloud bus在整个后端服务中起到联通的作用,比如我们需要更新整体配置...

    redis-pubsub-demo:Spring Boot和Redis PubSub的演示项目

    Redis Pub/Sub(发布/订阅)是Redis数据库系统中的一个重要特性,它允许客户端订阅特定的通道(channels),然后发布者可以通过这些通道向订阅者发送消息。在这个"redis-pubsub-demo"项目中,我们将深入探讨如何在...

    redis作业1111

    在SpringBoot项目中,我们可以使用Spring Data Redis库方便地与Redis进行交互。配置Redis连接信息,然后通过`RedisTemplate`或`StringRedisTemplate`进行操作。此外,还可以使用`@Cacheable`、`@CacheEvict`等注解...

    spring-integration

    10. **Redis Channel Message Stores**:**Spring Integration**现在支持使用Redis作为消息存储,这对于高性能场景非常有用。 11. **MongoDB Channel Message Store**:同样,MongoDB也被集成进来作为消息存储选项...

    spring mvc 基础框架,自动生成源码 开发效率非常高

    在Spring MVC中,可以使用Spring Data Redis模块轻松地与Redis交互,实现对热点数据的高速访问,降低数据库压力。此外,Redis还可以作为分布式锁、消息队列等的载体,进一步提升系统性能。 短信通道和激光通道的...

    spring cloud stream kafka 消息驱动集成

    - Spring Cloud Stream 提供了一个编程模型,允许开发者将应用程序作为消息处理功能的输入和输出绑定到外部的消息代理,如 RabbitMQ、Kafka 或 Redis。 - 应用程序通过定义输入和输出绑定来消费和发布消息。每个...

    IoTLink是一个基于 SpringBoot Redis 等开发的轻量级的物联网综合业务支撑平台.rar

    基于 SpringBoot、Vue、Mybatis、RabbitMq、Mysql、Redis 等开发的轻量级的物联网综合业务支撑平台。支持物联网卡、物联网模组、卡+模组融合管理。提供状态、资费、客户、进销存、合同、订单、续费、充值、诊断、...

    后端开发基础知识整理JAVA、JVM、操作系统、网络、设计模式、mysql、redis、多线程、spring、springboo

    本篇文档对后端开发中的关键知识点进行了全面而深入的梳理,涵盖了Java语言基础、JVM、操作系统、网络技术、数据库、缓存、多线程、Spring框架等方面的核心概念和技术要点。以下是针对文档标题、描述以及部分内容中...

    Netty、WebSocket、Spring代码案例研究 即时通讯

    WebSocket是一种在客户端和服务器之间建立长连接的协议,为双向通信提供了低延迟、高效率的通道。在即时通讯场景下,WebSocket是理想的选择。 1. **握手协议**:WebSocket通过HTTP/HTTPS进行初始化握手,然后升级到...

    calm-cloud:实践搭建:springcloud + nacos +网关+ springsecurity

    平静的云 ...冷静的父母包括:swagger,redis,jasypt,email,jwt,nacos,openfeign,springboot-admin 冷静-常见包括:言行,安全 镇静核心包括:mysql,mybatis-plus,mybatis-plus-dynamic-dataso

    springboot搭建的简易聊天室demo

    此外,我们还需要设置订阅和发布频道,以便通过Redis通道将消息推送给所有在线用户。 客户端部分,我们可以使用JavaScript的WebSocket API来与服务器建立连接并接收发送消息。HTML页面中,我们可以监听WebSocket的`...

Global site tag (gtag.js) - Google Analytics