Apache Camel 调研

Apache Camel 调研

什么是Camel? Camel框架的核心是一个路由引擎,或者更确切地说是一个路由引擎构建器。它允许您定义自己的路由规则,决定从哪个源接收消息,并确定如何处理这些消息并将其发送到其他目标。 Camel提供更高层次的抽象,使您可以使用相同的API与各种系统进行交互,而不管系统使用的协议或数据类型如何。 Camel中的组件提供了针对不同协议和数据类型的API的特定实现。开箱即用,Camel支持80多种协议和数据类型。 Getting started 源码地址:https://github.com/camelinaction/camelinaction.git 下面是一个拷贝文件的例子,将文件从data/inbox拷贝到data/outbox 1 添加maven依赖 <dependencies> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.15.6</version> </dependency> </dependencies> 2 代码 public class FileCopierWithCamel { public static void main(String args[]) throws Exception { // create CamelContext CamelContext context = new DefaultCamelContext(); // add our route to the CamelContext context.addRoutes(new RouteBuilder() { public void configure() { /** file: 表示使用文件Component from 表示从哪里获取数据,进行消费 to 表示将数据生产到哪里 */ from("file:data/inbox?noop=true").to("file:data/outbox"); } }); // start the route and let it do its work context.start(); Thread.sleep(10000); // stop the CamelContext context.stop(); } } Camel概念 CamelContext Camel的容器,通过CamelContext可以访问内部服务:Components,Endpoints,Endpoints,Registry等等 image.png Routes 通过路由可以实现:客户端与服务端,生产者与消费者的解耦 比如:从ftp服务上获取订单信息,将其发送到JMS队列,可以通过如下路由表示 //from可以理解成消费者:表示从ftp服务上获取数据进行消费 from("ftp://rider.com/orders?username=rider&password=secret") //to可以理解成生产者:表示将数据发送给jms .to("jms:incomingOrders"); image.png endpoint URI 可以简单理解成消息的地址 对

CoreDNS 使用指北

CoreDNS 使用指北

前言 CoreDNS 是一个从 Caddy 中 Fork 出来的项目(同时继承了它的链式中间件风格),作为 CNCF 项目中的一员,它的目标是提供一个快速且灵活的 DNS 服务。 CoreDNS - DNS and Service Discovery 更新历史 2018 年 07 月 10 日 - 初稿 阅读原文 - https://wsgzao.github.io/post/coredns/ 扩展阅读 CoreDNS - https://coredns.io/ CoreDNS 简介 In Kubernetes 1.11, CoreDNS is the default DNS server. CoreDNS is a DNS server. It is written in Go. It can be used in a multitude of environments because of its flexibility. CoreDNS is licensed under the Apache License Version 2, and completely open source. Development takes place on Github. Most devs hang out on Slack on the #coredns channel. CoreDNS 安装 直接在 Github 上下载对应执行文件压缩包 https://github.com/coredns/coredns/releases Linux 上下载安装(以官方新版本为基准) 1 2 3 wget https://github.com/coredns/coredns/releases/download/v1.1.4/coredns_1.1.4_linux_amd64.tgz tar xzf coredns_1.1.4_linux_amd64.tgz mv coredns /usr/local/bin CoreDNS 配置 参考 QuickStart 中的配置 https://coredns.io/2017/07/24/quick-start/ 配置文件 Corefile 示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 . { proxy . 223.5.5.5:53 { except example.org protocol dns } prometheus # enable metrics errors stdout # show errors log stdout # show query logs } example.org { file /etc/coredns/zones/example.org prometheus # enable metrics errors stdout # show errors log stdout # show query logs } 具体 Corefile 配置说明请参考文档 https://coredns.io/2017/07/23/corefile-explained/ 而 / etc/coredns/zones/example.org 的配置文件示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ORIGIN example.org. @ 3600 IN SOA sns.dns.icann.org. noc.dns.icann.org. ( 2017042745 ; serial 7200 ; refresh (2 hours) 3600 ; retry (1 hour) 1209600 ; expire (2 weeks) 3600 ; minimum (1 hour) ) 3600 IN NS a.iana-servers.net. 3600 IN NS b.iana-servers.net. www IN A 127.0.0.1 IN

count(1)、count(*)与count(列名)的执行区别

count(1)、count(*)与count(列名)的执行区别

执行效果: 1. count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count()用时多了!从执行计划来看,count(1)和count()的效果是一样的。但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别! 2. count(1) and count(字段) 两者的主要区别是 count(1) 会统计表中的所有的记录数,包含字段为null 的记录。 count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。 出自:http://www.cnblogs.com/Dhouse/p/6734837.html count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。 执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。 出自:http://eeeewwwqq.iteye.com/blog/1972576 实例分析 mysql> create table counttest(name char(1), age char(2)); Query OK, 0 rows affected (0.03 sec) mysql> insert into counttest values     -> ('a', '14'),('a', '15'), ('a', '15'),     -> ('b', NULL), ('b', '16'),     -> ('c', '17'),     -> ('d', null),     ->('e', ''); Query OK, 8 rows affected (0.01 sec) Records: 8  Duplicates: 0  Warnings: 0 mysql> select * from counttest; +------+------+ | name | age  | +------+------+ | a    | 14   | | a    | 15   | | a    | 15   | | b    | NULL | | b    | 16   | | c    | 17   | | d    | NULL | | e    |      | +------+------+ 8 rows in set (0.00 sec) mysql> select name, count(name), count(1), count(*), count(ag

UDP 组播---你需要了解这些

UDP 组播---你需要了解这些

先来了解下UDP UDP 是UserDatagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。 UDP和TCP的区别:http://blog.csdn.net/ljheee/article/details/50823050 UDP详解:http://blog.csdn.net/ljheee/article/details/51720594 UDP信息传递的方式分三类 ① 单播Unicast:是客户端与服务器之间的点到点连接。 ② 广播BroadCast:主机之间“一对所有”的通讯模式,广播者可以向网络中所有主机发送信息。广播禁止在Internet宽带网上传输(广播风暴)。 ③ 多播MultiCast:主机之间“一对一组”的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据。 这里需要注意的是:只有UDP才有广播、组播的传递方式;而TCP是一对一连接通信。多播的重点是高效的把同一个包尽可能多的发送到不同的,甚至可能是未知的设备。但是TCP连接是一对一明确的,只能单播。 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:DatagramSocket和DatagramPacket。 关于UDP使用的详细例子:https://github.com/ljheee/ChatUDP UDP组播 组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。单播数据传输过程中,一个数据包传输的路径是从源地址路由到目的地址,利用“逐跳”的原理[路由选择]在IP网络中传输。 然而在ip组播环中,数据包的目的地址不是一个,而是一组,形成组地址。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向组地址的数据立即开始向接收者传输,组中的所有成员都能接收到数据包。组播组中的成员是动态的,主机可以在任何时刻加入和离开组播组。 用同一个IP多播地址接收多播数据包的所有主机构成了一个主机组,也称为多播组。一个多播组的成员是随时变动的,一台主机可以随时加入或离开多播组,多播组成员的数目和所在的地理位置也不受限制,一台主机也可以属于几个多播组。此外,不属于某一个多播组的主机也可以向该多播组发送数据包。 组播地址 组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有

idea 中解决maven 包冲突的问题(maven helper)

idea 中解决maven 包冲突的问题(maven helper)

日常开发中经常会遇到xxx.class 找不到的异常,但是这个类确实存在我们的项目中,就会感觉很离奇,其实这就是包冲突的问题 冲突问题 比如项目中引用了两个 fastjson.jar的版本,分别为 fastjson:1.2.28 fastjson:1.2.3 我们用到了1.2.28中的某个类, 比如 A类,在版本更新中 1.2.3版本去掉了这个类,然而我们项目中maven 却把1.2.3的 jar 打包进去了,那我们就会报异常,不存在这个 class,但是我们调错误的时候却发现这个类存在,那我们怎么找到问题根源呢,到底是哪个包的需要Exclude 呢,我之前也不会,今天有幸找到个方法,分享给大家。 idea 中maven 问题 idea 中查看 maven 依赖只会给你一个复杂到极点图,基本没有啥价值,所以要安装个插件 maven helper,这个插件用了都说好啊 解决问题 首先安装插件 maven helper(因为我已经安装了,所以没 install 的按钮了) 安装完成后,在 pom 文件下方会出现这个东西 点进去你会发现仿佛回到了 eclipse 接下来到重点了,选中冲突选项 conflicts,这一列都是存在冲突的包 以fastjson 为例 当然我们调错误的时候也可以直接搜索有问题的包,如下 选中右键就可以 Exclude 啦,想用1.2.28就把其他版本的Exclude掉,想用1.2.3就把其他版本的Exclude掉,是不是很方便。 --------------------- 版权声明:本文为CSDN博主「你是我的小眼睛儿」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/sunpeng_sp/article/details/77393348

联系我们

联系电话

4000-640-466

联系邮箱

service@f-li.cn

办公地址

上海黄浦区外滩源1号

谢谢,您的信息已成功发送。
请填写信息。