跨服务器异步传输

#最近项目中要求跨服务器同步数据,想到两种解决办法
#方法1 http请求
#通过curl 将数据同步到另外系统,但http不确定因素太多丢失部分数据且没办法做记录
#方法2 异步队列
#在发送端做定时推送,数据存储到redis中,redis将存储的数据分发到接收接口

/**
 * 定时推送套装至company系统
 * @author :[email protected]
 */
public function pushSuits()
{
    (php_sapi_name() == ‘cli‘) or die(‘Please run under the cli‘);

    $this->load->model(‘suits_model‘);
    $this->load->helper(‘log‘);
    $this->load->library(‘RedisDriver‘, ‘redisdriver‘);

    while (true) {
        $this->redisdriver->connect();

        $device_last_push_id = $this->redisdriver->getStr(‘device_last_push_id‘);
        $device_last_push_id = is_null($device_last_push_id) ? ‘2846‘ : $device_last_push_id; // 旧数据不推送

        // 完成的套装
        $suits = $this->suits_model->pushSuitsById($device_last_push_id, 0, 200);
        $datas = array();
        foreach ($suits as $row) {
            // 料号不为空
            if (!empty($row[‘pn‘])) {
                $datas[] = $row[‘pn‘] . ‘|‘ . $row[‘code‘];
            }
        }

        // 有数据时
        if (!empty($datas)) {
            $params = array(
                ‘suits‘ => implode(‘,‘, $datas),
            );
            // 压入异步http队列
            $this->redisdriver->pushList(‘queue_device_inventory‘, $params);
            log_info(‘queue_device_inventory‘, json_encode($params));
            // 保存最后操作id
            $this->redisdriver->setStr(‘device_last_push_id‘, $suits[count($suits)-1][‘id‘]);
            log_info(‘device_last_push_id‘, $suits[count($suits)-1][‘id‘]);
        }

        sleep(1800);
    }
}

  

时间: 2024-11-07 13:09:19

跨服务器异步传输的相关文章

跨服务器修改数据

说明: 两个服务器: 192.168.0.22   A 192.168.0.3     B 数据库备份在A上 数据库在B上 在A上写: exec sp_addlinkedserver   'ITSV2', ' ', 'SQLOLEDB', '服务器地址' exec sp_addlinkedsrvlogin  'ITSV2', 'false',null, '用户名', '密码' --SQL语句 insert into BookDB.dbo.T_ID(id)select  FenJian_ID fr

缓存一致性和跨服务器查询的数据异构解决方案canal

当你的项目数据量上去了之后,通常会遇到两种情况,第一种情况应是最大可能的使用cache来对抗上层的高并发,第二种情况同样也是需要使用分库 分表对抗上层的高并发...逼逼逼起来容易,做起来并不那么乐观,由此引入的问题,不见得你有好的解决方案,下面就具体分享下. 一:尽可能的使用Cache 比如在我们的千人千面系统中,会针对商品,订单等维度为某一个商家店铺自动化建立大约400个数据模型,然后买家在淘宝下订单之后,淘宝会将订单推 送过来,订单会在400个模型中兜一圈,从而推送更贴切符合该买家行为习惯的

跨服务器上传文件方式

跨服务器上传文件的方式有很多,其中一种是使用在中间服务器上使用临时文件的方式进行保存后再发送到另一个服务器上,实现文件上传. 问题点:中间保存临时文件,还需要不定时的进行文件清理,比较麻烦 直接进行文件的转发,使用byte[]数组方式直接进行文件转发,然后,服务器根据传递的byte[]数组进行转文件方式,使用httpclient方式将byte[]数组发送到服务端,特别注意的点在于, 发送的时候使用"content-type" = "application/json"

Resin 跨服务器的session传递

Resin 跨服务器的session传递 --By oldjavaman 1.   基于文件的session持久化技术 Seesion能够被跨服务器持久化, 包含我们的web应用的Class发生变化, 譬如在开发期间,使用基于文件的持久化Seesion技术是非常便捷的, 尤其是我们在开发时, 当Servlet会发生经常变化 在resin.conf中配置如下 <web-app xmlns="http://caucho.com/ns/resin">   <session-

数据异构解决方案缓存一致性和跨服务器查询

缓存一致性和跨服务器查询的数据异构解决方案canal 当你的项目数据量上去了之后,通常会遇到两种情况,第一种情况应是最大可能的使用cache来对抗上层的高并发,第二种情况同样也是需要使用分库 分表对抗上层的高并发...逼逼逼起来容易,做起来并不那么乐观,由此引入的问题,不见得你有好的解决方案,下面就具体分享下. 一:尽可能的使用Cache 比如在我们的千人千面系统中,会针对商品,订单等维度为某一个商家店铺自动化建立大约400个数据模型,然后买家在淘宝下订单之后,淘宝会将订单推 送过来,订单会在4

触发器实现跨服务器

原文:http://blog.sina.com.cn/s/blog_59c41d0d0100esja.html 最进在做项目时遇到了一个比较棘手的问题,有两个数据库分别部署在不同的服务器上,系统要求两个服务器实现数据同步操作即热备份,于是就不能不用到SQL触发器这一武器了,当初也考虑了几种解决方案:比如程序中同时操作两个库或写一个外挂程序执行数据库定时任务,但这些方案需要频繁的连接数据库,特别是有张实时数据的表,每天都会产生海量的数据,程序中频繁定时的查询操作势必严重影响系统运行效率,都没有触发

ASP.NET跨服务器上传文件的相关解决方案

第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ Page Language="C#" EnableViewState="false"%> <%@ Import Namespace="System.Net" %><%@ Import Namespace="Syste

SQL SERVER 数据库跨服务器查询插入数据

SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!在这里有两个概念:本地数据源.远程数据源!本地数据源指的是单个服务器上的数据而远程数据源指的是另一个SQL实例上的数据.如何跨服务器取数呢?一.如果经常访问或数据量大,建议用链接服务器--创建链接服务器exec sp_addlinkedserver ''srv_lnk'','''',''SQLOLEDB'',''远程服务器名或ip地址''exec sp_addlinked

跨服务器之间的session共享

跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称,最早由Sun公司为解决Unix网络主机间的目录共享而研发. 这个方案实现最为简单,无需做过多的二次开发,仅需将共享目录服务器mount到各频道服务器的 本地session目录即可,缺点是NFS依托于复杂的安全机制和文件系统,因此并发效率不高,尤其对于session这类高并发读写的小文件, 会由于共