代码空间

摘要(Abstract)

EdgeX Foundry 的原始代码主要来自 Dell 的 Fuse 项目,以 Apache 2.0 许可证发布。主要编程语言是Java,整体框架采用 Spring Boot、Spring Framework、Docker、Consul 等微服务注册和配置中心等技术构成。 其中核心微服务有 8 个:分别是 core-data、command、metadata、consul、mongodb、edgex-files、log、notification 服务,这是启动 EdgeX Foundry 工程的最小依赖。第五代移动电话行动通信标准,也称第五代移动通信技术,外语缩写:5G。也是4G之后的延伸,正在研究中,5G网络的理论传输速度超过10Gbps(相当于下载速度1.25GB/s) [12-13] 。 诺基亚与加拿大运营商Bell Canada合作,完成加拿大首次5G网络技术的测试。测试中使用了73GHz范围内频谱,数据传输速率为加拿大现有4G网络的6倍。鉴于两者的合作,外界分析加拿大很有可能将在5年内启动5G网络的全面部署。 由于物联网尤其是互联网汽车等产业的快速发展,其对网络速度有着更高的要求,这无疑成为推动5G网络发展的重要因素。因此无论是加拿大政府还是全球各地,均在大力推进5G网络,以迎接下一波科技浪潮。不过,从2016年的情况来看5G网络离商用预计还需4到5年时间。

主题(Topic)



项目(Project)

boot2docker/boot2docker minishift/minishift-b2d-iso weikinhuang/boot2docker-kubernetes minishift/minishift-centos-iso 31z4/packer-boot2docker kaosagnt/boot2docker-xfs-ng 31z4/vagrant-boot2docker-swarm monitoringartist/dockbix-agent-xxl org.apache.poi poi ${poi_version} org.apache.poi poi-ooxml-schemas ${poi_version} org.apache.poi poi-scratchpad ${poi_version} org.apache.poi poi-ooxml ${poi_version} org.apache.activemq activemq-all 5.8.0 org.apache.activemq activemq-pool ${activemq_version} org.apache.xbean xbean-spring 3.16 javax.servlet servlet-api ${javax.servlet-api.version} provided javax.servlet.jsp jsp-api 2.1 provided javax.servlet jstl 1.2 redis.clients jedis 2.7.2 org.redisson redisson 1.0.2 org.slf4j jcl-over-slf4j ${slf4j.version} org.slf4j slf4j-log4j12 ${slf4j.version} org.springframework.data spring-data-redis 1.6.2.RELEASE org.springframework spring-webmvc ${spring.version} commons-logging commons-logging org.springframework spring-tx ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework.data spring-data-redis 1.6.2.RELEASE org.springframework spring-orm ${spring.version} org.springframework spring-jms ${spring.version} org.springframework.session spring-session ${spring.session.version} org.springframework spring-core ${spring.version} redis-config.xml [html] view plain copy 在CODE上查看代码片派生到我的代码片 redis.properties [plain] view plain copy 在CODE上查看代码片派生到我的代码片 redis.host.ip=192.168.0.101 redis.host.port=6379 redis.maxTotal=1000 redis.maxIdle=100 redis.maxWait=2000 redis.testOnBorrow=false redis.testOnReturn=true web.xml [html] view plain copy 在CODE上查看代码片派生到我的代码片 contextConfigLocation classpath:/spring/redis-conf.xml springSessionRepositoryFilter org.springframework.web.filter.DelegatingFilterProxy springSessionRepositoryFilter /* 30 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:/spring/spring-mvc.xml 1 dispatcher / org.springframework.web.context.ContextLoaderListener sessionServlet sample.SessionServlet sessionServlet /servlet/session index.jsp 这边主要是一个: [html] view plain copy 在CODE上查看代码片派生到我的代码片 springSessionRepositoryFilter org.springframework.web.filter.DelegatingFilterProxy springSessionRepositoryFilter /* 30 这个filter一定要写在一切filter之前 SessionController [java] view plain copy 在CODE上查看代码片派生到我的代码片 package sample; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by mk on 15/1/7. */ @Controller @EnableRedisHttpSession public class SessionController { @RequestMapping("/mySession") public String index(final Model model, final HttpServletRequest request) { if (request.getSession().getAttribute("testSession") == null) { System.out.println("session is null"); request.getSession().setAttribute("testSession", "yeah"); } else { System.out.println("not null"); } return "showSession"; } } showSession.jsp文件 [html] view plain copy 在CODE上查看代码片派生到我的代码片 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> showSession <% String sessionValue=(String)session.getAttribute("testSession"); %>

Session Value From Servlet is: <%=sessionValue%>

测试 保证我们的redise-server是启动的,然后我们启动起这个web工程后使用: http://localhost:8080/webpoc/mySession访问一下这个controller 此时我们使用redis客户端工具连入查看spring session是否已经进入到了redis中去。 在redis客户端工具连入后我们可以在redis console中使用keys *来查看存入的key,LOOK,spring的session存入了redis中去了。 再来看我们的eclipse后台,由于我们是第一次访问这个controller,因此这个session为空,因此它显示如下: 我们在IE中再次访问该controller 由于之前的session已经存在于redis了,因此当用户在1800秒(30分钟)内再次访问controller,它会从session中获取该session的key testSession的值,因此eclipse后台打印为not null。 SpringRedisTemplate + Redis 讲过了spring session+redis我们来讲使用spring data框架提供的redisTemplate来访问redis service吧。说实话,spring这个东西真强,什么都可以集成,cassandra, jms, jdbc...jpa...bla...bla...bla...Spring集成Barack Hussein Obama? LOL :) pom.xml 不用列了,上面有了 redis-conf.xml 不用列了,上面有了 web.xml 也不用列了,上面也有了 SentinelController.java 我们就先用这个名字吧,后面我们会用它来做我们的redis sentinel(哨兵)的高可用(HA)集群测试 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package sample; import java.util.HashMap; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.redis.core.BoundHashOperations; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; import util.CountCreater; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; /** * Created by xin on 15/1/7. */ @Controller public class SentinelController { @Autowired private StringRedisTemplate redisTemplate; @RequestMapping("/sentinelTest") public String sentinelTest(final Model model, final HttpServletRequest request, final String action) { return "sentinelTest"; } @ExceptionHandler(value = { java.lang.Exception.class }) @RequestMapping("/setValueToRedis") public String setValueToRedis(final Model model, final HttpServletRequest request, final String action) throws Exception { CountCreater.setCount(); String key = String.valueOf(CountCreater.getCount()); Map mapValue = new HashMap(); for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations boundHashOperations = redisTemplate .boundHashOps(key); boundHashOperations.putAll(mapValue); System.out.println("put key into redis"); } catch (Exception e) { e.printStackTrace(); throw new Exception(e); } return "sentinelTest"; } } 打开IE,输入:http://localhost:8080/webpoc/setValueToRedis 观察我们的后台 然后使用redis client连入后进行查看 看。。。这个值key=1的,就是我们通过spring的redisTemplate存入进去的值,即使用下面这段代码进行存入的值: [java] view plain copy 在CODE上查看代码片派生到我的代码片 for (int i = 0; i < 1000; i++) { mapValue.put(String.valueOf(i), String.valueOf(i)); } try { BoundHashOperations boundHashOperations = redisTemplate.boundHashOps(key); boundHashOperations.putAll(mapValue); 如何你要存入一个简单的如key=test value=hello,你可以这样使用你的redisTemplate [java] view plain copy 在CODE上查看代码片派生到我的代码片 redisTemplate.execute(new RedisCallback() { @Override public Object doInRedis(RedisConnection connection) throws DataAccessException { connection.set( redisTemplate.getStringSerializer().serialize( "test"), redisTemplate .getStringSerializer() .serialize("hello")); return null; } }); 是不是很方便的哈?结束第一天的教程,明天开始搭建redis集群。" class="topic-tag topic-tag-link"> Redis-