背景:
我对谷歌的云平台很陌生,所以我想确保我没有遗漏任何明显的东西.
我们正在尝试使用GKE和Kubernetes,我们希望通过https公开一些服务.我已经阅读了http(s)负载平衡的文档,这似乎表明你应该维护自己的nginx实例来进行SSL终端和负载平衡.对我而言,这看起来相当复杂(我习惯于在AWS及其负载均衡器(ELB)上工作,该负载均衡器支持多年的SSL终端).
问题:
我们有一个Hystrix(1.4.x)命令,看起来像这样(使用Spring):
@HystrixCommand(groupKey = "GroupKey", commandKey = "CommandKey", fallbackMethod = "myFallback")
public List<X> findXs(long xId) {
return externalService.findXsExternally(xId);
}
Run Code Online (Sandbox Code Playgroud)
我们实际上不希望List从fallback方法返回一个(空),而是抛出一个异常,以便我们的调用者findXs知道它externalService已经关闭并且可以相应地采取行动.但与此同时,我们希望利用Hystrix提供的功能.在我们的例子中,我们希望调用者返回错误消息而不是返回列表.在Spring中,后备实现如下:
public List<X> myFallback(long xId) {
// What to do?? Throw exception!?
}
Run Code Online (Sandbox Code Playgroud)
从myFallback"作品"中抛出异常,但Hystrix会警告我们:
CommandKey失败并且回退失败.
即它会将此解释为后备失败.在我们的情况下,异常应不被解释为后备失败而是预期的行为.我们也尝试将抛出的异常包装在一个HystrixBadRequestException但是它似乎不适用于回退(根据文档,这将适用于"运行"方法).
如何在Hystrix中实现异常抛出的回退方法?我们可以安全地忽略警告,还是Hystrix不是这样设计的?
有没有办法以编程方式获取容器属于Kubernetes的pod的名称?如果是这样的话?我正在使用fabric8的java客户端,但卷曲或类似的东西也会很好.
请注意,从那时起我不想使用特定标签找到pod(我假设)如果使用复制控制器缩放,我可能无法找到合适的pod.
这是RESTful API的后续问题:我应该在哪里编写工作流程?问题的简短摘要(适合我的问题更好)将是这样的:
每个域对象包含与特定有界上下文(X)中的特定对象相关联的业务逻辑.REST API包含将查询或命令的结果转换为通过线路发送的数据的逻辑(例如JSON).当使用HATEOAS和超媒体时,我们希望使用链接建模资源之间的关系.但是为了确定REST API应该返回哪些链接,通常需要求助于业务逻辑/规则.问题是,这些"工作流程规则"属于DDD应用程序的位置?他们是否可能处于不同的有限上下文中,只处理工作流规则(可能与X的"伙伴"式关系)或者它们是否属于X BC?
我是 F# 新手,所以如果这是一个愚蠢的问题或者语法可能有点不对,请提前原谅我。希望无论如何都可以理解问题的要点。
我想要实现的是组合 eg Result's (或 anEither或类似的东西)具有不同错误类型(受歧视联合)的可能性,而无需创建包括其他两个受歧视联合的并在内的明确受歧视联合。
让我举一个例子。
假设我有一个这样Person定义的类型:
type Person =
{ Name: string
Email: string }
Run Code Online (Sandbox Code Playgroud)
假设您有一个验证名称的函数:
type NameValidationError =
| NameTooLong
| NameTooShort
let validateName person : Result<Person, NameValidationError>
Run Code Online (Sandbox Code Playgroud)
另一个验证电子邮件地址:
type EmailValidationError =
| EmailTooLong
| EmailTooShort
let validateEmail person : Result<Person, EmailValidationError>
Run Code Online (Sandbox Code Playgroud)
现在我想编写validateNameand validateEmail,但问题是 中的错误类型Result有不同的类型。我想要实现的是一个函数(或运算符),它允许我做这样的事情:
let validatedPerson = person |> validateName |>>> validateEmail
Run Code Online (Sandbox Code Playgroud)
(|>>>是“魔术运算符”)
通过使用|>>>错误类型validatedPerson将是 …
使用Spring Boot时是否有一个application.yml或application.properties文件中可用的所有属性的列表?我似乎只找到了常见的.
我有一个ansible文件(my_file.yml),看起来像这样:
---
- name: The name
hosts: all
tasks:
- include:my_tasks.yml
vars:
my_var: "{{ my_var }}"
Run Code Online (Sandbox Code Playgroud)
my_tasks.yml 看起来像这样:
- name: Install Curl
apt: pkg=curl state=installed
- name: My task
command: bash -c "curl -sSL http://x.com/file-{{ my_var }} > /tmp/file.deb"
Run Code Online (Sandbox Code Playgroud)
我想my_var作为命令行参数传递给ansible,所以我喜欢这样:
ansible-playbook my_file.yml --extra-vars "my_var=1.2.3"
Run Code Online (Sandbox Code Playgroud)
但我最终得到以下错误:
... Failed to template {{ my_var }}: Failed to template {{ my_var }}: recursive loop detected in template string: {{ my_var }}
Run Code Online (Sandbox Code Playgroud)
如果我vars在里面my_file.yml看起来像这样:
- include:my_tasks.yml
vars:
my_var: …Run Code Online (Sandbox Code Playgroud) 如果提交消息以给定字符串开头,我想忽略运行 Jenkins 作业。我尝试添加“其他行为”和“轮询忽略某些消息的提交”:
即,如果提交消息以“doc!”开头,我想忽略该作业(在我的世界中这意味着不运行该作业)。我已经尝试了几个在线正则表达式匹配器,我认为 的正则表达式^doc!.*是正确的。但即使我的提交消息确实以“doc!”开头 该工作由 Jenkins 执行。我究竟做错了什么?
这个问题与Spring Web Flux 中的立即返回有关,但我认为不一样(至少那里的答案对我来说并不令人满意)。
我有一个函数返回一个Mono,当被调用时会启动一个长时间运行的工作。当调用 Spring Webflux HTTP API 时会调用此函数。下面是一个例子:
@PutMapping("/{jobId}")
fun startNewJob(@PathVariable("jobId") jobId: String,
request: ServerHttpRequest): Mono<ResponseEntity<Unit>> {
val longRunningJob : Mono<Job> = startNewJob(jobId)
longRunningJob.map { job ->
val jobUri = generateJobUri(request, job.id)
ResponseEntity.created(jobURI).build<Unit>()
}
}
Run Code Online (Sandbox Code Playgroud)
上面代码的问题是“201 Created”是在长时间运行的作业完成后创建的。我想longRunningJob在后台启动并立即返回“201 Created”。
我也许可以做这样的事情:
@PutMapping("/{jobId}")
fun startNewJob(@PathVariable("jobId") jobId: String,
request: ServerHttpRequest): Mono<ResponseEntity<Unit>> {
startNewJob(jobId)
.subscribeOn(Schedulers.newSingle("thread"))
.subscribe()
val jobUri = generateJobUri(request, job.id)
val response = ResponseEntity.created(jobURI).build<Unit>()
Mono.just(response)
}
Run Code Online (Sandbox Code Playgroud)
但对我来说,必须subscribe()手动调用似乎不太习惯(例如,intellij 抱怨我subscribe()在非阻塞范围内调用)。没有更好的方法来组合两个“流”而不使用显式subscribe?如果是这样,我如何修改 …
我对 dotnet 和 vscode 完全陌生,所以我可能会错过一些微不足道的东西。我只想让 F# 在我的 Mac 上的 VSCode 中运行。我首先尝试从brew安装dotnet:
brew cask install dotnet-sdk
Run Code Online (Sandbox Code Playgroud)
这似乎从命令行工作得很好,因为我可以同时执行dotnet new和dotnet build:
dotnet new console -lang F# -o myproj
Run Code Online (Sandbox Code Playgroud)
现在我安装了同样来自brew的Visual Studio Code:
brew cask install visual-studio-code
Run Code Online (Sandbox Code Playgroud)
然后我安装了Ionide-fsharp插件,myproj从 vscode 打开该文件夹并重新启动它。然后我受到的欢迎是:
FSharp.dotnetRoot然后我在设置中搜索并尝试配置它:
但这没有帮助(我也尝试将文件夹设置为/usr/local/share/dotnet但/usr/local/share/dotnet/sdk/3.1.100没有任何效果)。
所以我完全卸载了brew中的所有内容(包括擦除我的~/.vscode文件夹),并重新安装了微软官方文档中的所有内容。在文档中,它说 F# 支持应该内置到 macosx 上的 vscode 中,但当我再次打开该文件夹时,它仍然建议我安装 Ionide-fsharp,所以我服从了。但我又遇到了完全相同的问题。
所以我的问题是:如何在 MacOSX 上安装支持 F# 的 vscode?
这是我的 vscode“about”的输出:
Version: 1.41.0
Commit: 9579eda04fdb3a9bba2750f15193e5fafe16b959
Date: 2019-12-11T17:58:38.338Z
Electron: 6.1.5
Chrome: 76.0.3809.146 …Run Code Online (Sandbox Code Playgroud) java ×3
spring-boot ×3
f# ×2
kubernetes ×2
.net-core ×1
ansible ×1
fabric8 ×1
git ×1
hateoas ×1
hypermedia ×1
hystrix ×1
ionide ×1
jenkins ×1
macos ×1
rest ×1
spring ×1
spring-cloud ×1
ssl ×1