小编sme*_*eeb的帖子

Gradle相当于Maven的"复制依赖"?

在Maven-land中,只要我想简单地下拉特定POM文件的传递依赖项,我只需打开一个shell,导航到POM所在的位置,然后运行:

mvn dependency:copy-dependencies
Run Code Online (Sandbox Code Playgroud)

繁荣时,Maven target/在当前目录中创建一个目录,并将所有可传递的JAR放置到该位置.

我现在正试图切换到Gradle,但Gradle似乎没有相同的功能.所以我问:Gradle是否有相当于Maven的copy-dependencies 如果是这样,有人可以提供一个例子吗?如果没有,其他开发者会发现这对Gradle社区有价值吗?

dependency-management gradle maven

11
推荐指数
3
解决办法
1万
查看次数

Akka消息传递机制的例子

我有相当数量的Apache Camel(路由/调解/编排引擎;轻量级ESB)经验,并试图了解Akka之间的区别:

  • 调度员(Dispatcher,PinnedDispatcher,CallingThreadDispatcher)
  • 路由器
  • 活动巴士

根据文件:

调度员是:

...是让Akka演员"打勾"的原因,它可以说是机器的引擎.

但这并没有真正解释调度员是什么或与演员的关系是什么.

路由器是:

消息可以通过路由器发送,以有效地将它们路由到目标参与者,称为路由器.路由器可以在actor的内部或外部使用,您可以自己管理路由或使用具有配置功能的自包含路由器actor.但这听起来很像调度员.

游泳池是:

[一种]路由器[that]创建路由器作为子actor,如果它们终止则将它们从路由器中删除.

团体是:

[类型] actor [路由]在路由器外部创建,路由器使用actor选择将消息发送到指定路径,而不监视终止.

活动巴士是:

...向演员组发送消息的方法

这听起来就像调度员和路由器.

所以我的主要关注点是:

  • 调度员,路由器和事件总线之间有什么区别,以及何时使用它们?
  • 何时使用池vs组?

routing dispatcher akka event-bus

11
推荐指数
1
解决办法
2658
查看次数

检查节点运行状况的服务发现工具和负载均衡器之间的概念差异是什么?

最近几种服务发现工具已经变得流行/"主流",我想知道在哪些主要用例中应该使用它们而不是传统的负载平衡器.

使用LB,您可以在平衡器后面聚集一堆节点,然后客户端向平衡器发出请求,然后平衡器(通常)将这些请求循环到集群中的所有节点.

通过服务发现(Consul,ZK等),您可以让集中的"共识"服务确定特定服务的哪些节点是健康的,并且您的应用程序连接到服务认为健康的节点.因此,虽然服务发现和负载平衡是两个独立的概念,但服务发现可为您提供负载平衡作为方便的副作用.

但是,如果负载均衡器(比如HAProxynginx)内置了监控和运行状况检查,那么您几乎可以将服务发现作为负载均衡的副作用!这意味着,如果我的LB知道不将请求转发到其集群中的不健康节点,那么这在功能上等同于共识服务器,告诉我的应用程序不要连接到不可靠的节点.

所以对我来说,服务发现工具感觉就像"6合1,其他半打"相当于负载均衡器.我在这里错过了什么吗?如果有人的应用程序架构完全基于负载平衡微服务,那么切换到基于服务发现的模型有什么好处?

load-balancing distributed-computing service-discovery consul microservices

11
推荐指数
1
解决办法
850
查看次数

Docker,Registrator和Consul就是一个例子

我是新来的两个码头工人和领事,并想获得如何集装箱的应用程序可以使用领事的感觉服务注册和KV对配置管理("配置").

我的理解是我可以:

  • 创建运行领事服务器,所以像图像这样 ; 然后
  • myvm01.example.com(Ubuntu VM)上调出三个Docker-Consul容器(从而形成一个集群/仲裁); 然后
  • 重构我的应用程序以使用Consul并创建一个运行我的应用程序和Consul代理的Docker镜像,并将代理程序配置为在启动时加入3节点仲裁.启动时,我的应用程序使用本地Consul代理程序下拉所有配置,存储为KV对.它还提供已注册/健康的服务,并使用本地负载平衡工具来平衡与其集成的服务.
  • 比如说,运行我的app的容器myvm02.example.com(另一个Ubuntu VM).

首先,如果任何一个看起来我误解了Docker和Consul(没有Registrator)的正常/正确使用,请首先纠正我!

假设我或多或少是正确的,我最近偶然发现了Registrator,现在更加困惑.Registrator似乎是您的应用程序容器和您的Consul(或您使用的任何注册表)服务器之间的中间人.

阅读他们的快速入门教程后,听起来你应该做的是:

  • myvm01.example.com像以前一样部署我的Consul集群/仲裁容器
  • 我没有直接使用Consul"Dockerizing"我的应用程序,而是将其与Registrator集成
  • 然后我在某处部署一个Registrator容器,并将其配置为与Consul集成
  • 然后我部署我的app容器.它们与Registrator集成,而Registrator则与Consul集成.

我的担忧:

  • 我的理解在这里是正确还是偏离基础?如果是这样,怎么样?
  • 通过添加Registrator实际获得了什么.它似乎(至少未训练的眼睛)不像应用程序和服务注册表之间的间接层.
  • 我还能通过Registrator利用Consul的KV配置服务吗?

docker consul

11
推荐指数
1
解决办法
3576
查看次数

如何在JavaDoc中自定义"概述"页面?

我希望我的库的javadoc 的" Overview "页面基本上是整个JAR的用户/ API指南.我知道package-info.java在包中添加一个类允许你编写包级别的 javadocs,但是在jar级别呢?

我知道我可以README.md在项目的根目录中添加一个,但我喜欢将README视为库开发人员的文档(即,将维护库的人).但JavaDocs是将要使用该库的人的API指南.

java javadoc

10
推荐指数
1
解决办法
5615
查看次数

Akka Java FSM示例

请注意:我是一名Java开发人员,不熟悉Scala(遗憾的是).我会问答案中提供的任何代码示例都将使用Akka的Java API.

我正在尝试使用Akka FSM API来建模以下超级简单的状态机.实际上,我的机器要复杂得多,但这个问题的答案将允许我推断我的实际FSM.

在此输入图像描述

所以我有两种状态:OffOn.您可以Off -> On通过拨打电话来启动机器SomeObject#powerOn(<someArguments>).您可以On -> Off通过拨打电话关闭电源SomeObject#powerOff(<someArguments>).

我想知道为了实现这个FSM,我需要哪些演员和支持类.我相信代表FSM的演员必须延伸AbstractFSM.但是什么类代表了两个州呢?什么代码公开并实现powerOn(...)powerOff(...)状态转换?一个有效的Java示例,甚至只是Java伪代码,对我来说都有很长的路要走.

java fsm actor akka

10
推荐指数
1
解决办法
3420
查看次数

现代Akka DI与Guice

这里有Java 8,Guice 4.0和Akka 2.3.9.我试图弄清楚如何使用JSR330样式的@Inject注释来注释我的actor类,然后通过Guice将它们连接起来.

但实际上,我读过的每一篇文章(下面的一些例子)都使用了Scala代码示例,一个犯罪版本的Guice,或者是一个犯罪旧版本的Akka:

因此,给出以下Guice模块:

public interface MyService {
    void doSomething();
}

public class MyServiceImpl implements MyService {
    @Override
    public void doSomething() {
        System.out.println("Something has been done!");
    }
}

public class MyActorSystemModule extends AbstractModule {
    @Override
    public void configure() {
        bind(MyService.class).to(MyServiceImpl.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且考虑FizzActor到注入了MyService:

public class FizzActor extends UntypedActor {
    private final MyService myService;

    @Inject
    public FizzActor(MyService myService) {
        super();

        this.myService = myService;
    }

    @Override
    public void onReceive(Object message) …
Run Code Online (Sandbox Code Playgroud)

java guice akka

10
推荐指数
1
解决办法
5273
查看次数

Spock标签组合

| | 这么多 | Spock | spec如何使用其标签的示例,例如:

// when -> then label combo
def "test something"() {
    when:
    // blah

    then:
    // blah blah
}
Run Code Online (Sandbox Code Playgroud)

这样的标签组合如下:

  • when - > then
  • given- > when- >then
  • expect
  • given - > expect

但我无处可以找到有关这些标签的合法 /有意义组合的文档.例如,我可以:

def "do something"() {
    when:
    // blah

    expect:
    // blah
}
Run Code Online (Sandbox Code Playgroud)

我可否?我不知道.关于什么:

def "do something else"() {
    when:
    // blah

    then:
    // blah

    expect:
    // blah

    where:
    // blah
}
Run Code Online (Sandbox Code Playgroud)

我可否?再说一次,我不知道.但我想知道.

groovy spock

10
推荐指数
1
解决办法
2883
查看次数

Spring Boot Devtools示例

根据Spring Boot Devtools文档,devtools不会以"生产模式"运行; 也就是说,如果你执行你的Spring Boot应用程序,java -jar ..,它将不会使用devtools的内置JVM魔法.但是,Spring Boot入门文档只向您展示了运行Spring Boot应用程序的一种方法... via java -jar....

首先,我想知道:如何在非生产模式下运行Spring Boot应用程序?我知道您可以使用Spring Boot CLI(例如spring run)运行您的应用程序,但这是唯一的方法吗?

此外,相同的devtools文档提到您可以通过使用某些excludeDevtools选项从生产二进制文件中显式删除devtools jar ,但它们从不解释在何处/如何使用它.这里有任何例子/想法吗?

java spring-boot

10
推荐指数
1
解决办法
6212
查看次数

Servlet过滤器"代理"仅作用于来自远程端点的响应

我需要将某些HTTP请求重定向到Spring Boot Web应用程序/服务,但是在请求端,Spring应用程序什么都不做,并且充当HTTP客户端(另一个服务)和请求的真实之间的直通目的地.但是当响应回到Spring应用程序(来自该目的地)时,我需要Spring应用程序能够检查响应,并在需要时可能对其采取措施.所以:

  1. HTTP客户端向http://someapi.example.com发出请求
  2. 网络魔术将请求路由到我的Spring应用程序,比如http://myproxy.example.com
  3. 根据请求,此app/proxy不执行任何操作,因此请求将在http://someapi.example.com上转发
  4. http://someapi.example.com上的服务端点将HTTP响应返回给代理
  5. http://myproxy.example.com上的代理检查此响应,并可能在将响应返回给原始客户端之前发送警报

基本上,一个过滤器充当请求的传递,并且在远程服务执行并返回响应之后才真正做任何事情.

到目前为止,我最好的尝试是设置一个servlet过滤器:

@Override
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    chain.doFilter(request, response)

    // How and where do I put my code?
    if(responseContainsFizz(response)) {
        // Send an alert (don't worry about this code)
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,我在哪里放置检查和响应的代码?使用我的代码时,我尝试从浏览器访问控制器时会抛出异常:

java.lang.IllegalStateException: STREAM
    at org.eclipse.jetty.server.Response.getWriter(Response.java:910) ~[jetty-server-9.2.16.v20160414.jar:9.2.16.v20160414]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_92]
  rest of stack trace omitted for brevity
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java proxy spring servlet-filters

10
推荐指数
1
解决办法
1050
查看次数