gateway java
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gateway java相关的知识,希望对你有一定的参考价值。
参考技术A gateway java是什么,让我们一起了解一下?gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式,目标是替代ZUUL。例如:安全,监控/埋点,和限流等。
我们为什么要用gateway?
1、Spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级版和代替品,比 Zuul 2 更早的使用 Netty 实现异步 IO,从而实现了一个简单、比 Zuul 1.x 更高效的、与 Spring Cloud 紧密配合的 API 网关。
2、Spring Cloud Gateway 里明确的区分了 Router 和 Filter,并且一个很大的特点是内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用。
3、比如内置了 10 种 Router,使得我们可以直接配置一下就可以随心所欲的根据 Header、或者 Path、或者 Host、或者 Query 来做路由。
比如区分了一般的 Filter 和全局 Filter,内置了 20 种 Filter 和 9 种全局 Filter,也都可以直接用。当然自定义 Filter 也非常方便。
那么gateway怎么用?
说白了 Predicate 就是为了实现一组匹配规则,方便让请求过来找到对应的 Route 进行处理,接下来我们接下 Spring Cloud GateWay 内置几种 Predicate 的使用。
通过时间匹配:
比如我们现在设置只有在 2019 年 1 月 1 日转发,我就可以这样配置:
spring: cloud: gateway: routes: - id: time_route uri: http://ityouknow.com predicates: - After=2018-01-20T06:06:06+08:00[Asia/Shanghai]
当然除了通过时间匹配,我们还可以通过以下方式:
1、通过 Cookie 匹配
2、通过 Host 匹配
3、通过请求方式匹配
4、通过请求路径匹配
5、通过请求参数匹配
6、通过请求 ip 地址进行匹配
Azure Java 函数 -502-Bad Gateway
【中文标题】Azure Java 函数 -502-Bad Gateway【英文标题】:Azure Java function -502-Bad Gateway 【发布时间】:2018-11-09 23:05:12 【问题描述】:我已经按照以下链接创建了 Java azure 函数:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-create-first-java-maven
Java 类:
package com.khan;
import java.util.*;
import com.microsoft.azure.serverless.functions.annotation.*;
import com.microsoft.azure.serverless.functions.*;
/**
* Azure Functions with HTTP Trigger.
*/
public class Function
/**
* This function listens at endpoint "/api/hello". Two ways to invoke it using "curl" command in bash:
* 1. curl -d "HTTP Body" your host/api/hello
* 2. curl your host/api/hello?name=HTTP%20Query
*/
@FunctionName("hello")
public HttpResponseMessage<String> hello(
@HttpTrigger(name = "req", methods = "get", "post", authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
final ExecutionContext context)
context.getLogger().info("Java HTTP trigger processed a request.");
// Parse query parameter
String query = request.getQueryParameters().get("name");
String name = request.getBody().orElse(query);
if (name == null)
return request.createResponse(400, "Please pass a name on the query string or in the request body");
else
return request.createResponse(200, "Hello, " + name);
函数创建和部署成功
现在当我尝试使用 curl 访问时
curl -w '\n' https://sundaydemo-20180526141357482.azurewebsites.net -d AzureFunctions
or postman
https://sundaydemo-20180526141357482.azurewebsites.net/api/hello
然后出现以下错误,我想知道是否有人遇到同样的错误。
502-坏网关
指定的 CGI 应用程序遇到错误,服务器终止了进程。
日志:
2018-05-31T02:02:50 Welcome, you are now connected to log-streaming service.
2018-05-31T02:03:50 No new trace in the past 1 min(s).
2018-05-31T02:04:50 No new trace in the past 2 min(s).
2018-05-31T02:05:50 No new trace in the past 3 min(s).
2018-05-31T02:06:50 No new trace in the past 4 min(s).
2018-05-31T02:07:50 No new trace in the past 5 min(s).
2018-05-31T02:08:50 No new trace in the past 6 min(s).
2018-05-31T02:09:17.161 [Information] Executing 'Functions.hello' (Reason='This function was programmatically called via the host APIs.', Id=b43d17c9-35c0-4c84-ab7e-26a8ec721fe9)
2018-05-31T02:10:50 No new trace in the past 1 min(s).
2018-05-31T02:11:50 No new trace in the past 2 min(s).
2018-05-31T02:12:50 No new trace in the past 3 min(s).
2018-05-31T02:13:50 No new trace in the past 4 min(s).
2018-05-31T02:14:17.183 [Error] Timeout value of 00:05:00 exceeded by function 'Functions.hello' (Id: 'b43d17c9-35c0-4c84-ab7e-26a8ec721fe9'). Initiating cancellation.
2018-05-31T02:14:17.451 [Error] Microsoft.Azure.WebJobs.Host: Timeout value of 00:05:00 was exceeded by function: Functions.hello.
2018-05-31T02:14:17.572 [Error] Executed 'Functions.hello' (Failed, Id=b43d17c9-35c0-4c84-ab7e-26a8ec721fe9)
2018-05-31T02:15:50 No new trace in the past 1 min(s).
2018-05-31T02:16:50 No new trace in the past 2 min(s).
2018-05-31T02:17:50 No new trace in the past 3 min(s).
2018-05-31T02:18:50 No new trace in the past 4 min(s).
还尝试删除所有并添加 CORS *
存储:
【问题讨论】:
你有什么进展吗? 这个问题应该用新的mvn插件解决了,你可以试试。 【参考方案1】:看来你遇到了Function Runtime 2.0 Preview Breaking Change。
在门户上,函数运行时已更新为 2.0.11857.0
(检查您的函数应用设置面板)。虽然 maven 插件还没有更新赶上来。
所以旧的mvn插件构建的代码与最新的运行时不兼容。
解决方法是将您的函数运行时固定到前一个。转到应用程序设置面板并将FUNCTIONS_EXTENSION_VERSION
从beta
更改为2.0.11776-alpha
。
更多详情请见issue discussion,新插件即将推出。
Update-6/15
新插件已发布。见notice for jave language worker。
使用最新的 Maven Azure Functions Archetype 创建新项目
mvn archetype:generate -DarchetypeGroupId=com.microsoft.azure -DarchetypeArtifactId=azure-functions-archetype
更新现有项目以使用最新的 Azure Function mvn 插件
功能代码(*.java)
之前
import com.microsoft.azure.serverless.functions.annotation.*;
import com.microsoft.azure.serverless.functions.*;
之后(删除无服务器)
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
pom.xml
1)之前
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure-functions-java-core</artifactId>
<version>1.0.0-beta-2/3</version>
</dependency>
之后
<dependency>
<groupId>com.microsoft.azure.functions</groupId>
<artifactId>azure-functions-java-library</artifactId>
<version>1.0.0-beta-4</version>
</dependency>
2)在excludeArtifactIds
中再找到一个azure-functions-java-core
,改成azure-functions-java-library
。
3)找到azure-functions-maven-plugin
,将版本改为1.0.0-beta-2
。在maven 上查看最新版本。
【讨论】:
谢谢!切换到 azure-functions-java-library 1.0.0-beta-4 使其工作。但是函数不再在本地工作。我已将 azure-functions-core-tools npm 包从 2.0.1-beta.28 更新到 2.0.1-beta.29,但没有帮助。我已经安装了 .NET Core Runtime (v.2.1.0)。 @PavelS。如果don't work
表示未找到工作职能,则为预期。旧的 mvn 插件不会生成 function.json
和 azure-functions-java-library
。等待新插件。或者你可以复制函数文件夹(里面有function.json)到目标。
@PavelS。新插件可用。
感谢使用新版本后,它在本地和 azure 上运行良好以上是关于gateway java的主要内容,如果未能解决你的问题,请参考以下文章
zabbix监控tomcat,jmx JavaGateway not host