小编sil*_*box的帖子

企业应用程序的集成架构最佳实践

我们的应用程序将像消费者一样集成到一堆外部系统中.

大多数集成不仅仅是消息处理和路由.有很多复杂的逻辑,比如存储当前状态,计划执行和其他东西.

此外,每个集成都没有共同的逻辑.

构建这种系统的最佳实践是什么?

我应该构建一体化集成层吗?它可以是一个单一的应用程序,每个集成具有不同的apache camel路由和处理器: 在此输入图像描述

或者我应该将它拆分成一堆小而简单的独立应用程序,以便它们可以独立扩展和部署?

在此输入图像描述

每种解决方案都能带来哪些好处和缺点?

integration enterprise

7
推荐指数
1
解决办法
1887
查看次数

非阻塞API如何工作?

我一直在阅读Play Framework文档,发现这个引用令人困惑:

请注意,您可能想要将您的阻止代码包装在Futures中.这不会使它成为非阻塞,它只是意味着阻塞将在不同的线程中发生.您仍然需要确保您使用的线程池有足够的线程来处理阻塞.

我的印象是所有那些非阻塞的lib都在他们自己的线程池中执行阻塞操作并返回Future对象,因此客户端代码不会被阻塞.

但是这句话说它并没有使它无阻塞.我错过了什么吗?是否有一些非阻塞库的高级魔术?

java multithreading asynchronous nonblocking

6
推荐指数
1
解决办法
2192
查看次数

围绕 Kotlin 挂起函数的方面

围绕 Kotlin 挂起函数创建方面的正确方法是什么?

根据我的观察,Micrometer 的 @Timed 方面确实适用于它们,但显示的结果不正确 - 看起来它测量的是方法调用和暂停之间的时间,而不是方法中花费的全部时间(应该包括暂停后的时间)

我想实现的示例:

@CoroutineTimer
suspend fun dbCall() {
    repository.someQuery().awaitFirst() // suspension point
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想知道花在dbCall函数上的全部时间,用自定义@CoroutineTimer注释标记。有没有办法这样做?

aop aspectj kotlin micrometer kotlin-coroutines

6
推荐指数
1
解决办法
401
查看次数

@Around 方面和 Kotlin 暂停函数

我尝试了解如何为 Kotlin\xe2\x80\x99s 挂起函数创建 @Around 方面(例如,测量在此函数中花费的时间,或自定义 @Transactional 方面):

\n\n
@Timed("my-timer")\nsuspend fun test() {\n    println("before")\n    delay(50) // invokes ProceedingJoinPoint#proceed() before this line\n    println("after")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于该函数有一个挂起函数调用,因此 @Aroundspect\xe2\x80\x99sproceed 函数将在delay() 调用之前被调用。但显然我\xe2\x80\x99d喜欢测量在该函数中花费的全部时间。

\n\n

解决问题的正确方法是什么?也许我可以以某种方式订阅该方法的最后一个延续,或者类似的东西?

\n

aop aspectj kotlin kotlin-coroutines

6
推荐指数
1
解决办法
2909
查看次数

Spring MVC @Scope代理bean和Jackson 2

我正在尝试开发一个小的Spring MVC应用程序,我希望User对象从每个会话开始初始化.

我有User类

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyUser implements User {

    // private fields
    // getters and setters


    public void fillByName(String username) {
        userDao.select(username);
    }

}
Run Code Online (Sandbox Code Playgroud)

我想在Spring Security识别用户时初始化MyUser对象,在拦截器类中(顺便说一句,这是一个好习惯吗?)

public class AppInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    MyUser user;

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();

        if (!(auth instanceof AnonymousAuthenticationToken)) {
            user.fillByName(auth.getName());
        }

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,当Controller处理请求时,已经初始化了会话范围的User类.但是当我尝试用Jackson序列化MyUser对象时,它只是不起作用:

@RequestMapping("/")
    public String launchApp(ModelMap model) {

        ObjectMapper mapper = new …
Run Code Online (Sandbox Code Playgroud)

spring json spring-mvc jackson

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

JWT 令牌 SSO 流程

我有一个关于 JWT 的 SSO 流程的简单问题

假设我们有单独的授权服务器,它为客户端应用程序/服务器和资源服务器提供 JWT,客户端尝试使用该令牌进行访问。

在此处输入图片说明

问题是,资源服务器应该自己验证令牌(例如,与身份验证服务器共享私有证书)还是应该请求身份验证服务器为每个客户端请求验证 JWT?

security single-sign-on jwt

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

六度分离面试问题

有人在最近的采访中被问到一个有趣的问题.

  • 你有100万用户
  • 每个用户有1千个朋友
  • 您的系统应该有效地回答Do I know him?每个用户的问题.如果用户通过6个级别的朋友连接,则用户"知道"另一个用户.

A朋友B,B是朋友C,C是朋友D,D是朋友E,E是朋友F.所以我们可以这么说,A知道F.

显然,您无法使用BFS或其他标准遍历技术有效地解决此问题.问题是 - 如何在数据库中存储此数据结构以及如何快速执行此搜索.

database algorithm math graph data-modeling

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

Java 8解析ISO-8601日期忽略时区的存在(或不存在)

我的应用程序应该能够解析忽略时区的日期(我总是知道它是UTC).问题是日期可能会出现以下两种形式 -

2017-09-11T12:44:07.793Z

0001-01-01T00:00:00

我可以解析第一个使用LocalDateTime,第二个使用Instant类.有没有办法使用单一机制?

PS我试图避免Z输入字符串末尾的硬编码

datetime iso8601 datetime-parsing java-8 java-time

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

在 MongoDB 中选择更新跳过锁定

我有 100 多个工作线程,它们将轮询数据库,寻找新工作。

要接受一项工作,一个线程需要将一堆文档的状态从NEW更改为IN_PROGRESS,因此没有其他线程可以窥视同一个工作。

这可以在 PostgreSQL with SELECT FOR UPDATE SKIP LOCKED WHERE status = "NEW"statement 中完美解决。

有没有办法在 MongoDB 中对单个文档进行这样的原子更新?一批?

mongodb

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

字段上的休眠正则表达式验证不起作用

我有一个简单的正则表达式,它应该只匹配字符串的最后 4 个字符中的字母和数字:

([a-zA-Z0-9]{4}$)
Run Code Online (Sandbox Code Playgroud)

它在在线测试器中完美运行,但如果我将它与字段上的休眠验证注释一起使用,则不匹配:

@NotNull
@Length(min = 4, max = 25)
@Pattern(regexp = "([a-zA-Z0-9]{4}$)")
private String test;
Run Code Online (Sandbox Code Playgroud)

例如,它为1234.5678-abC2字符串返回 false

你可以帮帮我吗?

java spring hibernate-validator

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