<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Http Filter 介绍 on Apache Dubbo</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/</link><description>Recent content in Http Filter 介绍 on Apache Dubbo</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/index.xml" rel="self" type="application/rss+xml"/><item><title>Dubbo HttpFilter 介绍</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/dubbo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/dubbo/</guid><description>&lt;h1 id="使用-http-调用-dubbo">使用 HTTP 调用 Dubbo&lt;/h1>
&lt;h2 id="定义pixiu配置文件">定义Pixiu配置文件&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">static_resources&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">listeners&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;http-listener&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">protocol_type&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;HTTP&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">socket_address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">address&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;0.0.0.0&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">port&lt;/span>: &lt;span style="color:#2aa198">8888&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">filter_chains&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">filters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: dgp.filter.httpconnectionmanager
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">route_config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">routes&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">match&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">prefix&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;*&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">http_filters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: dgp.filter.http.dubboproxy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">dubboProxyConfig&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">auto_resolve&lt;/span>: &lt;span style="color:#cb4b16">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">registries&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">protocol&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;zookeeper&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">timeout&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;3s&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">address&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;127.0.0.1:2181&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">username&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">password&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">timeout_config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">connect_timeout&lt;/span>: 5s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">request_timeout&lt;/span>: 5s
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">clusters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;dubbo-server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">lb_policy&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;lb&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">endpoints&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">id&lt;/span>: &lt;span style="color:#2aa198">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">socket_address&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">address&lt;/span>: &lt;span style="color:#2aa198">127.0.0.1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">port&lt;/span>: &lt;span style="color:#2aa198">20000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">shutdown_config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">timeout&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;60s&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">step_timeout&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;10s&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">reject_policy&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;immediacy&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="准备dubbo服务">准备Dubbo服务&lt;/h2>
&lt;h3 id="启动zookeeper需要提前准备好docker和compose如果本地有的话可以忽略">启动zookeeper,需要提前准备好docker和compose，如果本地有的话可以忽略&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-go-pixiu-samples/tree/main/dubbohttpproxy/server/dubbo/app">docker-compose.yml&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-shell" data-lang="shell">&lt;span style="display:flex;">&lt;span>docker-compose -f &lt;span style="color:#719e07">{&lt;/span>CURRENT_PATH&lt;span style="color:#719e07">}&lt;/span>/dubbo-go-pixiu-samples/dubbohttpproxy/docker/docker-compose.yml &lt;span style="color:#719e07">&amp;amp;&amp;amp;&lt;/span> docker-compose up -d
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="启动-dubbo-server">启动 Dubbo Server&lt;/h3>
&lt;p>&lt;a href="https://github.com/apache/dubbo-go-pixiu-samples/tree/main/dubbohttpproxy/server/dubbo/app">Run&lt;/a>&lt;/p></description></item><item><title>Metric 介绍</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/metric/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/metric/</guid><description>&lt;h1 id="指标上报过滤器-dgpfilterhttpmetric">指标上报过滤器 (dgp.filter.http.metric)&lt;/h1>
&lt;hr>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>&lt;code>dgp.filter.http.metric&lt;/code> 过滤器为 Pixiu 网关提供统一的指标上报功能。它整合了之前的两个过滤器（&lt;code>dgp.filter.http.metric&lt;/code> 和 &lt;code>dgp.filter.http.prometheusmetric&lt;/code>）的功能，并支持 &lt;strong>Pull&lt;/strong> 和 &lt;strong>Push&lt;/strong> 两种模式，集成了 OpenTelemetry。&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>注意&lt;/strong>：此过滤器默认使用 &lt;strong>Push&lt;/strong> 模式。如需使用 Pull 模式，请在配置中显式指定 &lt;code>mode: &amp;quot;pull&amp;quot;&lt;/code>。&lt;/p>
&lt;/blockquote>
&lt;h3 id="核心特性">核心特性&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>统一入口&lt;/strong>：单个过滤器支持 Pull 和 Push 两种模式&lt;/li>
&lt;li>&lt;strong>OpenTelemetry 集成&lt;/strong>：Pull 模式使用 OpenTelemetry（与 Pixiu Tracing 保持一致）&lt;/li>
&lt;li>&lt;strong>Context 扩展&lt;/strong>：其他过滤器可通过 &lt;code>HttpContext.RecordMetric()&lt;/code> 记录自定义指标&lt;/li>
&lt;li>&lt;strong>向后兼容&lt;/strong>：复用原有过滤器的逻辑&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="模式说明">模式说明&lt;/h2>
&lt;h3 id="pull-模式推荐">Pull 模式（推荐）&lt;/h3>
&lt;p>指标通过 HTTP 端点暴露，供 Prometheus 抓取。&lt;/p>
&lt;p>&lt;strong>特点：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>使用 OpenTelemetry SDK&lt;/li>
&lt;li>指标通过全局 HTTP 端点暴露&lt;/li>
&lt;li>Prometheus 标准拉取模型&lt;/li>
&lt;li>支持来自 Context 的动态自定义指标&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>适用场景：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>长期运行的服务&lt;/li>
&lt;li>Kubernetes 环境&lt;/li>
&lt;li>开发和测试环境&lt;/li>
&lt;/ul>
&lt;h3 id="push-模式">Push 模式&lt;/h3>
&lt;p>指标主动推送到 Prometheus Push Gateway。&lt;/p></description></item><item><title>Opa 介绍</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/opa/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/opa/</guid><description>&lt;h1 id="opa-过滤器-dgpfilterhttpopa">OPA 过滤器 (dgp.filter.http.opa)&lt;/h1>
&lt;hr>
&lt;h2 id="中文">中文&lt;/h2>
&lt;h3 id="概述">概述&lt;/h3>
&lt;p>&lt;code>dgp.filter.http.opa&lt;/code> 过滤器通过 Rego 策略将授权决策委托给 Open Policy Agent (OPA)。该过滤器评估每个 HTTP 请求并根据 Rego 策略决定是否允许或拒绝请求。策略通过内联 Rego 模块加载，并使用 OPA 的内置查询引擎进行评估。&lt;/p>
&lt;h3 id="实际行为">实际行为&lt;/h3>
&lt;ul>
&lt;li>从配置项 &lt;code>policy&lt;/code> 读取 &lt;strong>Rego 模块源码字符串&lt;/strong>。&lt;/li>
&lt;li>从配置项 &lt;code>entrypoint&lt;/code> 读取 &lt;strong>Rego 查询字符串&lt;/strong>。&lt;/li>
&lt;li>每次请求构造 &lt;code>input&lt;/code> 对象（见下），并评估该查询。&lt;/li>
&lt;li>如果查询结果为 &lt;code>true&lt;/code>，则放行请求；否则拒绝请求。&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>目前过滤器&lt;strong>不支持&lt;/strong>：外部文件或 URI 加载、自定义拒绝状态码或返回自定义错误体等。&lt;/p>
&lt;/blockquote>
&lt;h3 id="配置结构">配置结构&lt;/h3>
&lt;p>将过滤器添加到 HTTP 连接管理器的 &lt;code>http_filters&lt;/code> 列表中：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">filters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: dgp.filter.httpconnectionmanager
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">route_config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># ... 你的路由&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">http_filters&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: dgp.filter.http.opa
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">policy&lt;/span>: |&lt;span style="color:#2aa198">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> package http.authz
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> default allow = false
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> allow {
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> input.method == &amp;#34;GET&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> input.path == &amp;#34;/status&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198"> }&lt;/span> 
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">entrypoint&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;data.http.authz.allow&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#586e75"># HTTP proxy 过滤器应该在OPA 过滤器之后&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">name&lt;/span>: dgp.filter.http.proxy
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">config&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> 	&lt;span style="color:#586e75"># ... proxy config&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="字段说明">字段说明&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>&lt;code>policy&lt;/code>&lt;/strong>（字符串，必填）
&lt;ul>
&lt;li>&lt;strong>含义：&lt;/strong> &lt;strong>Rego 模块源码&lt;/strong>（内联字符串）。通过 &lt;code>rego.Module(&amp;quot;policy.rego&amp;quot;, policy)&lt;/code> 加载。&lt;/li>
&lt;li>&lt;strong>数据类型：&lt;/strong> &lt;code>string&lt;/code>（建议使用 YAML 多行格式 &lt;code>|&lt;/code>）。&lt;/li>
&lt;li>&lt;strong>说明：&lt;/strong> 当前版本不支持外部文件路径或 bundle URI。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>&lt;code>entrypoint&lt;/code>&lt;/strong>（字符串，必填）
&lt;ul>
&lt;li>&lt;strong>含义：&lt;/strong> 传给 &lt;code>rego.Query(...)&lt;/code> 的 &lt;strong>Rego 查询字符串&lt;/strong>，应为合法查询，如 &lt;code>data.&amp;lt;package&amp;gt;.&amp;lt;rule&amp;gt;&lt;/code>（如 &lt;code>data.http.authz.allow&lt;/code>）。&lt;/li>
&lt;li>&lt;strong>数据类型：&lt;/strong> &lt;code>string&lt;/code>。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="判定约定">判定约定&lt;/h4>
&lt;ul>
&lt;li>如果查询结果集合非空且首个表达式值为 &lt;strong>&lt;code>true&lt;/code>&lt;/strong>，则请求放行。&lt;/li>
&lt;li>否则（空结果或值≠&lt;code>true&lt;/code>），请求被拒绝。&lt;/li>
&lt;/ul>
&lt;h3 id="策略输入input">策略输入（&lt;code>input&lt;/code>）&lt;/h3>
&lt;p>过滤器将 HTTP 请求转换为以下键值对（与当前实现一致，策略编写时请进行空值检查）：&lt;/p></description></item><item><title>RateLimiter 介绍</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/ratelimit/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/ratelimit/</guid><description>&lt;p>欢迎认领补充此文档。&lt;/p></description></item><item><title>断路器介绍</title><link>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/hystrix/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://deploy-preview-3202--dubbo.netlify.app/zh-cn/overview/reference/pixiu/other/user/httpfilter/hystrix/</guid><description>&lt;p>欢迎认领补充此文档。&lt;/p></description></item></channel></rss>