1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zan-group-zanphp

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CHANGELOG.md 19 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 03:59 460be5b

Change Log

20170501

  1. Добавление кода для совместимости с внутренним пулом соединений swoole.
  2. Добавление поддержки websocket.
  3. Удаление поддержки двух старых версий драйверов swoole.
  4. Удаление всего связанного с aerospike кода.
  5. Исправление проблемы, когда при перезапуске worker не удавалось получить соединение nova, добавлена логика повтора.
  6. Исправление проблемы, из-за которой при инициализации в обратном вызове DNS-разрешения возникала проблема с получением соединения worker, добавлена логика повтора.

20170511

Исправление ошибки, когда не очищался таймер процесса filter.

20170320

Добавлен вызов Redis с таймаутом по умолчанию 2000 мс, который можно настроить в соединении (влияет на Store и Cache).

<?php 
return [
    'codis' => [
        'engine'=> 'redis',
        'host' => '127.0.0.1',
        'port' => 6602,
        'pool'  => [],
        'timeout' => 1000, // ms
    ],
];

20170315

Добавление необязательного конфигурационного файла config/env/apiconf.php, который имеет приоритет над ApiConfig.


20170314

Регистрация пользовательской обработки исключений HTTP Server. В каталоге resource\middleware добавлен exceptionHandler.php. Пример:

<?php

return [
     'match' => [
         [
            "index/index/index",  "all",
         ],
//         [
//             ".*", "all"
//         ]
     ],
     'group' => [
         "all" => [
             TestExceptionHandler::class,
         ],
     ],
];
 
<?php
class TestExceptionHandler implements ExceptionHandler
{
    public function handle(\Exception $e)
    {
        // Самостоятельно решить, как обрабатывать исключение
        return new Response("Ошибка сети");
        // или
        return null; // Не обрабатывать.
    }
}

TCP Server

Регистрация пользовательской обработки исключений TCP Server. В каталоге resource\middleware добавлен exceptionHandler.php. Пример:

<?php
use Zan\Framework\Network\Tcp\Exception\Handler\GenericExceptionHandler;

return [
    'match' => [
        [
            "/com/youzan/nova/framework/generic/service/GenericService/invoke", "genericExceptionHandlerGroup",
        ],
        [
            "/Com/Youzan/Nova/Framework/Generic/Php/Service/GenericTestService/ThrowException", "genericExceptionHandlerGroup",
        ],
        [
            ".*", "all"
        ]
    ],
    'group' => [
        "genericExceptionHandlerGroup" => [
            GenericExceptionHandler::class
        ],
        "all" => [
            GenericExceptionHandler::class
        ],
    ],
];

match добавляет serviceName и соответствующую группу обработчиков, фреймворк автоматически сопоставляет и выполняет соответствующий обработчик группы, если сопоставление успешно. Обработчик класса, например:

<?php
class GenericExceptionHandler implements ExceptionHandler
{
    public function handle(\Exception $e)
    {
        sys_error("GenericExceptionHandler handle: ".$e->getMessage());
        throw new \Exception("Ошибка сети", 0);
    }
}

После преобразования можно выбросить пользовательское исключение.


2017-02-27 Feature

haunt.php

Добавлена опция конфигурации «app_configs».

return [
     // Список сервисов, которые необходимо извлечь, здесь заполните имя приложения, зарегистрированное в реестре, если нет необходимости извлекать какие-либо сервисы, массив app_names может быть пустым
    'app_names' => [
        'scrm-api',
        'pf-api',
    ],

    // Извлечение конфигурации приложения 
    'app_configs' => [
        // Извлекаем сервис scrm-api из домена com.youzan.service
        'scrm-api' => [
            'protocol' => 'nova',
            'namespace' => 'com.youzan.service',
        ],
        // Извлекаем pf-api сервис из домена com.youzan.test
        'pf-api' => [
            'protocol' => 'nova',
            'namespace' => 'com.youzan.test',
        ],
    ],
];

nova.php

Конфигурация «novaApi» поддерживает публикацию нескольких пакетов thrift.

// Совместимость со старым способом настройки
return [
    'novaApi' => [
        'path'  => 'vendor/nova-service/pf/gen-php',
        'namespace' => 'Com\\Youzan\\Pf\\',
    ],
];
// Настройка нескольких пакетов
// Обратите внимание: несколько пакетов требуют одинакового пространства имён
// Обратите внимание: агент haunt ограничивает использование нескольких виртуальных приложений на одном и том же IP+порту, что не применимо
return [
    'novaApi' => [
        [
            'path'  => 'vendor/nova-service/scrm-base/gen-php',
            'namespace' => 'Com\\Youzan\\Scrm\\',
            'domain' => 'com.youzan.service', // Необязательно, по умолчанию com.youzan.service, конфигурация службы опубликована в конкретном домене
            'appName'   => 'scrm', // Необязательно, по умолчанию Application::getName(), конфигурация службы публикуется под именем приложения
            'protocol'   => 'nova', // Необязательно, в настоящее время всегда равно nova
        ],
        [
            'path'  => 'vendor/nova-service/scrm-core/gen-php',
            'namespace' => 'Com\\Youzan\\Scrm\\',
            'domain' => 'com.youzan.service', // Необязательно
``` **Сервис регистрации и сервис извлечения: некоторые пояснения**

1. При регистрации сервиса ключ etcdKey формируется на основе протокола, пространства имён, имени службы, IP-адреса и порта.
2. В списке srvList одноимённые ключи etcdKey определяют порядок приоритета: последующие элементы списка перекрывают предыдущие.
3. Список srvList используется для регистрации нескольких групп служб с разными пространствами имён или именами служб.
4. В системе zan протокол по умолчанию равен nova.
5. Пространство имён в zan можно настроить в novaApi, значение по умолчанию  com.youzan.service.
6. Имя службы в zan также настраивается в novaApi. Значение по умолчанию  Application::getName().
7. Различные пакеты thrift группируются по ключу etcdKey, и для каждой группы добавляются обобщённые методы вызова.

**Извлечение сервисов: пояснения**

1. Извлечение сервисов из etcd осуществляется по приложениям, возвращая n узлов экземпляра приложения.

**Thrift и приложение**

1. В файлах thrift в пространстве имён nova com.youzan.a.b.c связь между a и appName не является обязательной и может различаться.

------------------------------------------------------------------------------------------

### 2017-02-20 Feature Поддержка нескольких конфигураций App

Добавлены пути конфигурации root/resource/config_{{appName}}, где «appName» заменяется на «_». Конфигурация в пути config_{{appName}} имеет приоритет над конфигурацией в корневом пути config.

------------------------------------------------------------------------------------------

### 2017-02-04 Feature

В MySQL добавлена поддержка асинхронных транзакций.

------------------------------------------------------------------------------------------
### 2017-01-17 Fix

В Url::site схема по умолчанию установлена как https.

------------------------------------------------------------------------------------------

### 2017-01-16 Feature

1. Динамическое изменение весов и реализация мягкого распределения нагрузки.
2. Регистрация ошибок фреймворка в журнале.
3. Переработка hawk SDK для более полного сбора информации о мониторинге.

------------------------------------------------------------------------------------------

### 2017-01-02 Fix

Исправлена ошибка, связанная с несоответствием кода в обратном вызове async_mysql и кодом swoole, что приводило к появлению уведомлений об ошибках и отсутствию информации об исключениях.

------------------------------------------------------------------------------------------

### 2016-12-28 Fix

Устранена ошибка в планировщике, которая приводила к отправке асинхронных задач при возникновении исключений.

------------------------------------------------------------------------------------------

### 2016-12-23 Feature

Для соединений TCP и Redis добавлена поддержка Unix Socket. Добавлен элемент конфигурации path.

Конфигурация:
[ 'engine'=> 'redis', 'path' => "/var/run/yz-tether/redis2aerospike.sock", 'pool' => [ ... ], ], ]; ``` ------------------------------------------------------------------------------------------ ### 2016-12-23 Ошибки сети теперь сопровождаются кодом для различения от ошибок iron. Формат: «Ошибка сети (код)». ------------------------------------------------------------------------------------------ ### 2016-12-22 Feature При установке cookie, если домен не указан, он автоматически выбирается на основе запроса Host. Правила выбора домена: a. Встроенный список хостов: ``` [ '.koudaitong.com', '.youzan.com', '.qima-inc.com', '.kdt.im', ] ``` b. Можно добавить этот список через файл cookie.php: ```php 'foo.youzan.com', // or 'domain' => ["127.0.0.1", 'foo.youzan.com'], // ... 其他配置 ]; ```` c. Предпочтение отдаётся поддоменам. Если запрос Host равен bar.foo.youzan.com, а в списке domainList есть ['youzan.com', 'foo.youzan.com' и т. д.], то выбирается foo.youzan.com. ------------------------------------------------------------------------------------------ ### 2016-12-16 Feature Store добавлены пять новых методов: del, hDel, incr, incrBy, hIncrBy. Для совместимости KV::incr необходимо использовать Store::hIncrBy($configKey, $fmtArgs, Store::DEFAULT_BIN_NAME, $value). ------------------------------------------------------------------------------------------ ### 2016-12-14 Fix Исправлено исключение ParallelException, которое возникало при передаче в родительскую задачу. ------------------------------------------------------------------------------------------ ### 2016-12-14 Feature Добавлены системные вызовы getRpcContext(k) setRpcContext(k, v), которые позволяют передавать контекст сообщений через протокол nova. ------------------------------------------------------------------------------------------ ### 2016-12-13 Feature Добавлен класс Store, который обеспечивает доступ к KV через протокол Redis. Это решает проблему с утечками памяти в пуле соединений KV и coredump. 1. Строки, сохранённые через интерфейс KV, могут быть извлечены через интерфейс Store. 2. Нестроковые данные, сохранённые через интерфейс KV, требуют переноса данных. 3. Значения, сохранённые через интерфейс Store, не могут быть получены через интерфейс KV. Конфигурация: ``` [ 'engine'=> 'redis', 'host' => 'xx.xx.xx.xx', 'port' => 6666, 'pool' => [ 'maximum-connection-count' => 50, 'minimum-connection-count' => 10, 'init-connection'=> 10, ], ], ] ``` Совместимость: Чтобы избежать переноса данных, необходимо изменить интерфейсы для обеспечения совместимости данных: 1. KV::set заменить на Store::hSet. 2. KV::hSet заменить на Store::hSet. 3. KV::set использовать для получения данных Store::hGet. 4. KV::hSet использовать Store::hGet для получения данных. Получение данных: ```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zan-group-zanphp.git
git@api.gitlife.ru:oschina-mirror/zan-group-zanphp.git
oschina-mirror
zan-group-zanphp
zan-group-zanphp
master