标签: soa

微服务方法中的 API 与事件

就不同类型的请求而言,智能端点和哑管道怎么样?

读完后,我想订阅一些事件并处理它就足够了。但现在我意识到有时你应该开放API(也许不是为最终客户,而是为API网关等)。这个可以吗?或者您应该“事件化”(转换为事件)任何传入微服务云的请求?

例如,您有发票和订单服务。很明显,创建订单时,您可能会使用发票服务可能使用的事件来创建发票。很明显,为了接收最后一个用户的订单列表,您可以在订单服务端使用 CQRS,甚至只是创建新服务 LastOrders,它将仅保留所需数据的投影。但是这个请求是否应该转换为事件,或者 LastOrders 应该为此提供 API 并监听事件以更新它自己的数据库?

soa eda cqrs event-sourcing microservices

5
推荐指数
1
解决办法
3165
查看次数

每个微服务应该在自己的进程中运行吗?

假设我已将单体应用程序分成 5 个微服务。

现在我需要在 5 个进程中运行这 5 个微服务,还是可以让所有 5 个微服务在一个进程中运行?为什么?

deployment soa microservices

5
推荐指数
1
解决办法
1531
查看次数

服务网格与 2010 年 ESB 解决方案(例如 IBM IIB 或 Oracle ESB)有何不同

过去,我曾经是一名 IBM Integration Bus (IIB)(当时称为 IBM WebSphere Message Broker)开发人员。我将开发消息流来连接各种输入、输出和处理节点。当然,这种开发风格也适用于其他 ESB 供应商;所以,这个问题不失一般性。

IIB 的消息传递引擎是 WebSphere MQ (WMQ),它以队列消息或主题的形式提供通信。与 IIB 中的内部逻辑一起,节点之间通过消息进行通信。典型的 IIB/WMQ 也有详细记录的 HA 安装机制。此外,如果消息流公开 HTTP(S) 端点,它也可以在负载均衡器后面这样做。

同样,我们还可以谈论构成 SOA 时代的其他技术。因此,我的问题是,如果我

  • 开发与 WMQ 等通信的微服务
  • 将每个微服务部署到容器中
  • 使用 ESB 来编排这些微服务
  • 依赖 ESB(及其辅助技术)进行访问控制、流量管理等。

那么,除了“基于纯容器的架构”之外,我还需要 Istio 做什么?

https://developer.ibm.com/integration/blog/2014/07/02/ibm-integration-bus-high-availability-overview/

https://developer.ibm.com/integration/docs/ibm-integration-bus/learn-play/an-introduction-to-ibm-integration-bus/

soa containers esb istio

5
推荐指数
1
解决办法
1319
查看次数

启动weblogic服务器时,在目录C:\Program Files\Java\JDK18~1.0_2中找不到JRE

我已经在Windows 7中安装了Oracle soa suite Quickstart 12c (12.2.1.4.0)。我使用的java版本是jdk1.8.0_241。

创建独立域后,当我尝试使用 startWeblogic.cmd 启动 weblogic 服务器时,出现以下错误。

The JRE was not found in directory C:\Program Files\Java\JDK18~1.0_2 <JAVA_HOME>
Please edit your environment and set the JAVA_HOME variable to the root directory of your Java installation.
Run Code Online (Sandbox Code Playgroud)

链接到我的 cmd 窗口

我在我的环境中设置了 JAVA_HOME 变量,如下所示

JAVA_HOME = C:\Program Files\Java\jdk1.8.0_241

Run Code Online (Sandbox Code Playgroud)

请提出解决此问题的解决方案。

soa command-prompt java-home oracle-soa weblogic12c

5
推荐指数
2
解决办法
1万
查看次数

自定义休息协议是基于二进制而不是基于文本的Http是一件好事吗?

你有没有看到一个很好的理由来创建自定义二进制休息协议而不是使用基本的http rest实现?

我目前正致力于.Net中面向服务的架构框架,负责托管和使用服务.我不想基于像Remoting或WCF这样的现有框架,因为我需要完全的灵活性和控制来执行自定义优化.

所以在这里我试图找到处理这个SOA框架的最佳协议.我喜欢REST的请求/响应无状态连接性质和用于定义资源的uri,但我不喜欢HTTP的基于文本的性质.

以下是我不喜欢HTTP的论据,如果我错了,请纠正我:

  • 首先是证据,解析文本的效率低于解析二进制文件.我更喜欢包含内容长度和二进制内容的固​​定长度二进制头.

  • 其次,http请求没有序列号的概念,因此将响应与其请求相关联的唯一方法是用于发送请求和接收响应的套接字连接.这意味着对于指定的套接字一次只能有一个待处理的请求,因此如果服务使用者想要并行向服务发送多个请求,则需要向服务器打开多个套接字.自定义休息协议可以定义请求的序列号,因此请求和响应将与序列号而不是套接字相关联,并且可能在同一套接字上并行发送多个请求.我认为没有办法用HTTP标准地做这个,它可以用基于自定义文本的协议来完成,但为什么不把它做成二进制以获得性能.

为了添加更多上下文,我的SOA框架不需要从非.Net消费者访问,因此我对使用.Net二进制格式化程序或其他自定义二进制格式化程序没有任何限制.

我想要一个自定义二进制休息协议是否有任何意义?如果你认为我错了,请告诉我你的论点.

谢谢.

sockets rest binary soa

4
推荐指数
2
解决办法
1285
查看次数

SCA优于Spring的优势?

我有使用Spring开发Java Web应用程序的经验,但与SOA的世界不同.我正在阅读有关SCA-SCA4J的内容 - http://www.service-conduit.org/user-guide.pdf - 其中很多内容与Spring非常相似.

我试图了解SCA将会有什么用处,但仍然不了解SCA提供的使用Spring独立版的功能/优点.

我找到了这篇旧博客文章 - http://rajith.2rlabs.com/2007/08/05/sca-vs-spring-a-reply-to-dans-post/ - 但是没有什么能够从SOA中脱颖而出行话.

我很感激,如果有人能给出一个更适合春天开发人员的解释(他在SOA术语/方法论的世界里非常环保).

谢谢

java soa spring sca

4
推荐指数
1
解决办法
4214
查看次数

.NET中的分布式DDD:与客户端共享域对象

我正在开发一个3层应用程序(不是3层!),其中一个客户端应用程序在一个层(物理集群)上运行,该应用程序与另一个层上运行的服务应用程序和另一个层上的数据库服务器交互.该应用程序有很多业务规则,流程逻辑等,我认为应该可以在应用程序层和服务层上使用,以改善用户体验,减少对服务的调用以及消除冗余编码.

让我们使用这个例子:在我的域层中,我有一个Document对象.此对象包含AllowPublish属性,该属性检查对象的内部状态,如果状态允许发布文档,则返回true/false.该对象还有一个Publish方法,该方法通过将IsPublished标志设置为true并引发Published域事件来修改对象的内部状态以反映它正在发布的事实.

我有一个单独的AuthorizationService,它确定是否允许当前用户发布以及将对象持久保存到数据库的DocumentRepository.

在我的服务应用程序中,我的DocumentService有一个PublishDocument方法,它接受文档id,使用id从存储库中检索文档,检查AllowPublish属性,如果为true,则调用Publish,然后使用存储库保存更新的对象.

我在客户端上的行为略有不同.在这种情况下,我使用AllowPublish属性来启用/禁用命令按钮.启用并单击后,我调用一个服务代理,该代理公开一个接受文档ID的PublishDocument方法.代理将调​​用传递给服务应用程序的同名DocumentService方法.

为了消除重复的代码,共享业务逻辑,验证规则等,我将域对象放置在单独的程序集中,由客户端应用程序和服务应用程序共享.这意味着客户端应用程序现在可以访问我的Document类的Publish方法,即使它只是相关的,并且只应由我的服务应用程序使用.这让我重新考虑我正在采取的整个方法.

虽然我理解使用DTO在客户端和服务器之间传递状态,但我使用的是.NET 3.5,据我所知,共享程序集是与客户端应用程序共享业务和验证规则的唯一方法.我有一些想法,我可以去其他方向,但希望在走上新的道路之前得到一些建议.

另一方面,我对客户端的当前实现采用了我认为是一种全面的授权方法,这可能只是一个不同模型会更好的指标.就像我在我的服务器端服务应用程序中有一个AuthorizationService,DocumentService用来执行授权,我有一个类似于我的客户端代码使用的代理.这意味着我需要在客户端代码中使用另一层间接来支持授权,可能是Controller或ViewModel.如果用例是有效的,那么这很好.

编辑

我可能需要澄清,在编辑文档时,AllowPublish属性是动态的.首次检索时,它可能是错误的,但在满足业务规则时将变为真.在客户端应用程序中运行业务规则可以让我们提供更丰富的用户体验.

.net soa domain-driven-design

4
推荐指数
2
解决办法
1483
查看次数

调试到WCF服务

所以我们运行在SOA架构中.我有一个服务,我正在尝试调试来自不同解决方案中的WinForms应用程序的调用.

在这个winforms应用程序中,我已经在app.config中正确引用了localhost上的服务,现在我想启动一个WCF服务的实例,这样我就可以设置一个断点并逐步执行它.

当我进入服务时,我右键单击项目,转到属性,然后在"开始操作"下,我选择服务bin/debug /目录中的.exe文件.然后我保存,编译并按F5启动它的实例.我收到此错误:

在此输入图像描述

我该怎么办?

.net c# wcf soa visual-studio-2010

4
推荐指数
1
解决办法
3234
查看次数

ESB与服务

我是Java EE的新手,几天来一直在努力研究一些基本的中间件概念,并相信我可能在我对"如何工作"的理解方面取得了突破; 这个问题的一部分是要求确认我的调查结果,另一部分是合法的问题;-).

请确认/澄清:我对服务总线/ MOM(面向消息的中间件)的理解是,它们本质上是异步处理客户端请求.这与正常的请求 - 响应周期相反,它是同步的,通常由某种服务实现.在Java中,这样的总线/ MOM可能类似于Apache Camel,同步服务可能类似于EJB(3).因此,如果客户端需要立即处理请求,则HttpRequest可以转到Web服务,然后将请求转发到正确的EJB; EJB处理消息并将结果返回给服务,然后服务返回HttpResponse给客户端.因此,如果客户端有一个不阻止它们并且只需要处理的请求,则Web服务将它们转发HttpRequest到服务总线上的某个端点,并且该请求被视为消息并由各种处理器处理(滤波器,变压器等).

首先,如果我说错ESB/MOM解决方案最适合处理异步请求,那么请纠正我,并且EJB(同样,3.x)最适合实时响应同步请求; 或确认我是对的.

在这种情况下,在我看来,大型应用程序需要两种类型的后端来处理同步(阻塞)和异步(非阻塞)客户端请求.所以我的理论是将我的后端实现如下:

  • 使用像JBoss或GlassFish这样的成熟应用服务器
  • 在app server的web容器中有两个WAR:WebServices.warESB.war; 它们分别代表后端"网关"和服务总线
  • 在app server的业务容器中有我所有的EJB
  • 现在,WebService.war(网关)可以检测是否将请求中继到ESB或EJB

我的第二个问题是:我是否离开这里并且错过了中间件101的基本概念,或者这是一种中途体面的方法?

编辑:从最初的响应中我已经看到我在两个方面错了:(1)ESB和EJB实际上可以同步的或异步的,以及(2)当使用MDB时,EJB可以像ESB.

所以这些纠正给我带来了一些新的心理障碍:

  • 何时使用ESB,何时使用MDB/EJB解决方案; 和
  • 非常喜欢Apache Camel的Processors API(EIP的实现); 我可以使用MDB/EJB的但每一个EJB内只使用一个骆驼处理器(Filter,WireTap,等)?

java soa middleware apache-camel ejb-3.0

4
推荐指数
1
解决办法
2538
查看次数

SaaS - 多租户单独的数据库模型在Java中实现

我正在构建一个软件项目,我想实现一个SAAS(软件即服务)模型.我想设计一个兼容多租户的Web应用程序,每个租户都有单独的数据库.

如何在Java环境中设计多租户UI(UI应该是租户可配置的)?

如何为每个租户单独的数据库设计数据访问层(多租户数据库的单个应用程序实例)?

并建议我在Java环境中选择技术堆栈.

提前致谢.

architecture soa saas java-ee multi-tenant

4
推荐指数
1
解决办法
4220
查看次数