Канал ошибки Spring Integration в шлюзах

Я написал две простые функции, которые дают ту же функциональность, что и $stmt->get_result();, но они не требуют драйвера mysqlnd.

Вы просто замените

$result = $stmt->get_result(); на $fields = bindAll($stmt);

и

$row= $stmt->get_result(); с $row = fetchRowAssoc($stmt, $fields);.

(Чтобы получить числа возвращаемых строк, вы можете использовать $stmt->num_rows.)

Вам просто нужно разместить эти две функции, которые я написал где-то в вашем PHP-скрипте. (например, справа внизу)

function bindAll($stmt) {
    $meta = $stmt->result_metadata();
    $fields = array();
    $fieldRefs = array();
    while ($field = $meta->fetch_field())
    {
        $fields[$field->name] = "";
        $fieldRefs[] = &$fields[$field->name];
    }

    call_user_func_array(array($stmt, 'bind_result'), $fieldRefs);
    $stmt->store_result();
    //var_dump($fields);
    return $fields;
}

function fetchRowAssoc($stmt, &$fields) {
    if ($stmt->fetch()) {
        return $fields;
    }
    return false;
}

Как это работает :

В моем коде используется функция $stmt->result_metadata();, чтобы выяснить, сколько и какие поля возвращаются, а затем автоматически привязывает полученные результаты к предварительно созданным ссылкам. Работает как очарование!

0
задан Kris Swat 20 March 2019 в 16:30
поделиться

2 ответа

Вам не нужно error-channel, если у вас не будет потока компенсации . Если вы просто сгенерируете исключение, как в вашем случае, то не настраивайте error-channel.

В большинстве случаев нам также не нужен reply-channel, даже этот default-reply-channel. Если вы не используете output-channel в последней конечной точке вашего потока, будет использоваться заголовок replyChannel. Нам это нужно только reply-channel для случаев использования, когда нам нужна какая-то обработка ответного сообщения pub-sub, где мы хотели бы отправить ответное сообщение не только в качестве возврата для вызова метода шлюза, но и в какой-то другой поток.

Более подробная информация находится в Документах: https://docs.spring.io/spring-integration/docs/current/reference/html/#gateway

0
ответ дан Artem Bilan 20 March 2019 в 16:30
поделиться

Это зависит от того, что вы хотите сделать; Канал ошибок позволяет анализировать ошибки и возвращать различные результаты на основе исключения.

например. Вы можете попросить их попробовать еще раз для временной ошибки или сообщить о проблеме для фатальной ошибки в запросе.

Канал ответа, как правило, не нужен, если только вы не хотите что-то сделать, например, добавить проводной сигнал, чтобы записать ответ. Фактически этот канал в конечном итоге соединяется с заголовком replyChannel в запросе (именно так шлюз соотносит запросы / ответы.

0
ответ дан Gary Russell 20 March 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: