在微服务架构中,自治业务服务应该直接相互通信.通信可以是同步(编排)或基于事件(编排).API网关可以聚合客户端的API(前端的后端).通过微服务,我们正在寻求两个最终目标
这为更高复杂性的价格提供了持续部署,细粒度扩展,快速技术适应,可重用性,可审计性等等.
但是,强烈建议不要使用ESB(企业服务总线)或其他中间件.微服务和ESB通常被视为竞争对手的解决方案.为什么ESB看起来如此糟糕?只要它仅用作具有一些额外监视和认证层(没有业务逻辑)的冥想通道,在微服务架构中使用它有什么问题?
我想确保我理解Redux是对的.我的理解是它将存储应用程序的完整状态(包括所有子系统),如所有组件的模型以及获取的数据和用户生成的数据的缓存.这是否意味着我永远不应该使用服务来加载/保存组件的状态?
我正在制作一个测验应用程序,它包括测验,类别,问题和选择等组件.目前,每个组件都调用Web API来获取数据并维护它自己的状态,或者借助于通过id字段跟踪所有内容的服务.
我有一个名为AnswerService的专用服务来维护所选选项的状态,其中每个Choice组件在呈现时获取它的状态.
迁移到Redux意味着所有这些都将被移动到存储,几乎所有服务都将是无状态并直接发送到商店,并且所有组件模型都分别从商店订阅?
我有以下docker-compose文件
version: '3'
services:
node1:
build: node1
image: node1
container_name: node1
node2:
build: node2
image: node2
container_name: node2
Run Code Online (Sandbox Code Playgroud)
我可以构建两个图像,然后用一个命令启动它们
docker-compose up -d --build
但是我想在构建中使用build-args。超出组合范围的图像的原始构建脚本如下所示
#!/bin/sh
docker build \
--build-arg ADMIN_USERNNAME_1=weblogic \
--build-arg ADMIN_PASSWORD_1=weblogic1 \
--build-arg ADMIN_NAME_1=admin \
--build-arg ...
--build-arg ... \
-t test/foo .
Run Code Online (Sandbox Code Playgroud)
两个映像都将使用相同名称但值不同的build-args。另外,由于有数十个构建参数,将它们存储在组合服务特定的构建属性文件中会很方便。docker-compose是否可能?
由于某种原因,Web Service的调用会在我的本地Weblogic 12c安装上抛出NullPointerException.相同的包在另一个Weblogic 12c实例上正常工作,因此我的weblogic配置或server/java启动参数一定有问题.但是,我无法弄清楚有什么区别,服务器日志消息根本没有帮助.当然我们也使用相同的JRE和类路径库.
这是例外
####<8.8.2017, 2:10:53,106 ip. EEST> <Error> <com.sun.xml.ws.server.sei.TieHandler> <IT-V-R90HKRNH> <is-mansrv> <[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)'> <HekoPassi> <> <46eb29b8-cb8a-44a9-94ed-e223acc07388-0000005d> <1502190653106> <[severity-value: 8] [rid: 0] [partition-id: 0] [partition-name: DOMAIN] > <BEA-000000> <null
java.lang.NullPointerException
at weblogic.ejb.container.internal.BaseWSLocalObject.__WL_preInvoke(BaseWSLocalObject.java:85)
at com.foo.bar.service.sessionfacade.SessionFacadeBean_afdkf0_WSOImpl.__WL_getPublicKey_WS_preInvoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at weblogic.wsee.server.ejb.WsEjb.preInvoke(WsEjb.java:50)
at weblogic.wsee.jaxws.WLSEjbInstanceResolver$WLSEjbInvoker.invoke(WLSEjbInstanceResolver.java:193)
at weblogic.wsee.jaxws.WLSInstanceResolver$WLSInvoker.invoke(WLSInstanceResolver.java:93)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:149)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:88)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1136)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1050)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:1019)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:877)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:419)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:868)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:422)
at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:169)
at weblogic.wsee.jaxws.WLSServletAdapter.handle(WLSServletAdapter.java:229)
at weblogic.wsee.jaxws.HttpServletAdapter$AuthorizedInvoke.run(HttpServletAdapter.java:667) …Run Code Online (Sandbox Code Playgroud) 如何将maven多模块项目正确导入eclipse?当我导入新的maven项目并选择父pom时,我可以看到父pom下的子模块,它们在包资源管理器和项目资源管理器中可见.但是,它们被呈现为深层目录结构,就好像eclipse不知道它们是java项目.
当我展开子模块项目时,我没有看到java包快捷方式,因为我打开了一个maven项目.我只把它看作一个深层目录结构.如何导入multimodule maven项目并打开子模块项目以利用eclipse java项目功能?
我正在尝试围绕 lambda 演算,以及它与语言、编译器和二进制代码的关系。lambda 演算等同于图灵机的实际含义是什么,它实际上在哪里表现出来?
我不明白 lambda 演算如何取代图灵机作为计算的理论模型。图灵机是关于改变状态的顺序指令,lambda 演算是关于对某些东西进行评估的表达式。它更抽象,就像它自己的编程语言,而不是如何实际计算某些东西、使事情发生的模型。或者让我们这样说:lambda 演算就像路线图,而图灵机就像汽车模型。这两个如何被认为是等价的?是否有可能在不实施图灵机的情况下在硬件上运行软件?
例如,lisp 编译器和语言如何与 lambda 演算相关?lambda演算在哪一层实现?就 lambda 演算的定义而言,实现是否纯粹?lambda 演算背后的理论在哪里以及如何将语法转换为正在运行的二进制文件?例如,在 lambda 演算中,数字被编码为应用于其他函数 n 次的特殊函数。然而在语法上,我们使用数字文字。所有这些公理在哪里使用?
functional-programming computability lambda-calculus turing-machines computation-theory
据我所知,Apache Kafka是异步消息传递平台,Apache Camel是一个实现企业集成模式的平台.
那么,Apache Camel和Apache Kafka的实际差异是什么?我们计划用Apache Camel实现这个系统,这个系统比较容易,但是我们的客户想要Apache Kafka而不是理性的.
选择Apache Kafka实现消息队列功能有什么好处,这也可以用Apache Camel实现?我担心Kafka会给项目带来不必要的开销.我们比较苹果和橘子吗?
我们需要的是简单的API来设置和使用群集消息队列.我们的初始计划是使用Camel在集群JMS或ActiveMQ队列上使用/生成.Kafka如何让这项工作更轻松?无论哪种情况,应用程序本身都可以在WebLogic服务器上运行.
消息传递是点对点类型,其中有多个相同服务的实例在运行,但只有一个实例应该处理消息并根据负载平衡策略发出结果.消息队列也是群集的,因此服务实例或队列实例的故障都不是SPOF.
在docker中,当容器必须与外部系统通信时,如何确定配置known_hosts,authorized_keys和ssh连接的要求?
例如,我正在运行jenkins容器并尝试从作业中的github检出项目,但连接失败并出现错误 host key verification failed
这可以通过登录到容器,手动连接到github并在提示时信任主机密钥来解决.然而,这不是正确的解决方案,因为一切都需要100%自动化(我正在使用ansible和docker构建CI管道).另一个(笨重的)解决方案是为运行容器配备ansible,但这会使事情变得混乱且难以维护.Jenkins容器甚至没有ssh守护进程,我不知道如何从其他主机ssh到容器.第三个选项是使用我自己的Dockerfile扩展jenkins映像,其中配置了ssh,但这将是硬编码并将容器锁定到这个特定的环境.
那么docker管理(和自动化)与外部系统连接的正确方法是什么?
它是批准使用Redux与Angular 2状态管理,还是角2提供一些内部机制,以一致的方式来管理应用程序的状态?
我试图理解 Java 的ServiceLoader概念、工作机制和具体用例,但发现官方文档太抽象和混乱。
首先,文档概述了服务和服务提供商。服务是一组接口和抽象类,封装在一个 jar 档案(API 库)中。服务提供者是一组实现或扩展 API 的类,封装在一个不同的 jar 文件(提供者库)中。
到目前为止一切顺利,但随后文档变得混乱。
出于加载的目的,服务由单一类型表示,即单一接口或抽象类。(可以使用具体类,但不建议这样做。)给定服务的提供者包含一个或多个具体类,这些类使用特定于提供者的数据和代码扩展该服务类型。提供者类通常不是整个提供者本身,而是一个代理,它包含足够的信息来决定提供者是否能够满足特定请求以及可以按需创建实际提供者的代码。提供者类的细节往往是高度特定于服务的;没有任何一个类或接口可以统一它们,所以这里没有定义这样的类型。
那么实际上Service type和Provider class 是什么?我的印象是,服务类型是API 库中的一个门面,提供者类是提供者库中这个门面接口的实现,即ServiceLoader实际加载的类。这样对吗?但对我来说,所有组件如何联系在一起仍然没有多大意义。
提供者类作为代理来决定提供者是否能够满足特定请求以及可以按需创建实际提供者的代码是什么意思?无法在何处定义统一类型?基本上所有这一段都令人困惑,我想通过一个具体的例子听到更容易理解的解释。
然后关于提供者配置文件...
通过在资源目录 META-INF/services 中放置一个提供者配置文件来识别服务提供者。该文件的名称是服务类型的完全限定二进制名称。该文件包含具体提供者类的完全限定二进制名称列表,每行一个...
命名特定提供程序的配置文件不必与提供程序本身位于同一 jar 文件或其他分发单元中。提供者必须可以从最初查询以定位配置文件的同一个类加载器访问;请注意,这不一定是实际加载文件的类加载器。
这是否意味着对于服务类型为 org.foo.BarServiceType 的 API,在类路径中必须存在具有实现此类型的类的提供程序 jar和 META-INF/services/org.foo.BarServiceType列出此提供程序类的命名提供程序配置文件,所有这些都可以通过Classloader加载ServiceLoader查找的相同访问并在 API 上绑定提供者?
从类加载器的角度来看,可访问意味着提供者配置文件和提供者库可以在包的外部提供,在层次结构的上层,即从容器或其他中间件。
提供者配置文件列出了提供者类,并且可能捆绑在提供者包中(如果捆绑了为什么它会列出多个类?)或来自外部。但是哪种方法更常见:在提供者之间提供配置文件,还是从 API 库本身提供列出一组支持的提供者的文件?还是后者是一种误解?
最后关于 ServiceLoader
在哪里ServiceLoader实际实例化并调用以加载服务提供者?这是否发生在API 库提供的工厂方法中?例如,不LoggingFactory.getLogger(clazz)的SLF4J内部委托给ServiceLoader,它使用反射来读取提供者配置文件并加载服务?
服务加载机制如何处理存在多个提供者及其配置文件的情况,或者有提供者配置文件条目但没有类本身的情况?
ServiceLoader日志框架之外的其他一些具体用例是什么?它在Java …
architecture ×3
java ×3
angular ×2
docker ×2
javascript ×2
redux ×2
ansible ×1
apache ×1
apache-camel ×1
apache-kafka ×1
classloader ×1
containers ×1
eclipse ×1
esb ×1
frameworks ×1
jar ×1
java-ee ×1
jax-ws ×1
jenkins ×1
jms ×1
maven ×1
messaging ×1
multi-module ×1
project ×1
soa ×1
ssh ×1
web-services ×1
weblogic ×1