如今在微服务世界中,我在我的工作场所看到很多使用 kafka 消息传递的设计,当您可以使用微服务之间的 rest api 调用获得类似的结果时。从技术上讲,您可以完全停止使用 rest api 调用,而是使用 kafka 消息传递。我真的很想知道最佳实践,优缺点,微服务之间何时使用 api 调用,何时使用 kafka 消息传递。
让我们举一个现实生活中的例子:
我有库存服务和供应商服务。日常供应商服务调用供应商 API 来获取新项目,这些需要转移到库存服务中。项目数最多可达 10,000 个对象。
对于这个用例,最好是:
从供应商 API 获取新数据后,调用库存服务的 REST API 来存储新项目。
从供应商 API 获取新数据后,将它们作为消息发送到 kafka 主题,供库存服务使用
您会选择哪种方式以及考虑什么
rest apache-kafka microservices kafka-consumer-api spring-kafka
我正在使用Spring Data的Querydsl集成来使用谓词执行我的查询.
findAll(predicate, pageable)
Run Code Online (Sandbox Code Playgroud)
有没有办法转储执行的实际原始查询/命令?
我也查看了这个问题的答案,它对我不起作用. 配置MongoDB Java驱动程序的日志记录
- 更新 - 我设法通过在application.properties(而不是log4j.properties)中添加logging.level.org.mongodb.driver = DEBUG来使日志工作正常工作
但是,我仍然无法看到正在执行的原始查询:
2016-03-23 21:50:56 DEBUG查询:56 - 查询完成2016-03-23 21:50:56 DEBUG查询:56 - 在连接上发送命名空间testdb.reservation的查询[connectionId {localValue:4,serverValue: 42631}]到服务器ds046785.mongolab.com:39186
我的应用程序的场景类似于在Facebook上发送好友请求.
当用户A向用户B发送好友请求时,在内部创建新好友请求文档.在用户B也想要向A发送好友请求的稍后时间,系统会发现好友请求文件存在,因此他们应该是彼此的朋友,不会创建新的好友请求文档.
我试图找出用户A和用户B同时向对方发送朋友请求的情况,这将创建2个朋友请求文档并导致未确定的行为...
谢谢你的建议..真的很感激!
编辑:一些人建议使用请求队列来解决这个问题; 但是,我对使用队列感到困惑,因为我认为这将使我的休息api端点处理请求顺序.通过使用队列,我不会失去多线程的所有好处吗?我不禁想象,如果我的服务有数百万个请求排队并等待由于这个问题逐个执行,那将是多么糟糕.有没有人在生产过程中看到类似问题?
我的项目是使用react js的单页面应用程序.我听说Google可以抓取javascript页面,包括反应js单页面应用程序,而不需要服务器端渲染(即使它通常更适合SEO).
但是,当我使用网站管理员工具:抓取并呈现为谷歌时,谷歌机器人所看到的以及我的网页访问者看到的内容都是空白的.即使我可以添加特定网址到谷歌索引,谷歌只使用我放在我的静态index.html文件中的标题和描述标签,它不会获得嵌套的反应头盔组件的标题和描述.有没有人有这方面的经验?欣赏它!
我需要使用Firebase获取iOS的每月卸载次数.我知道对于Android,即使它不是很准确,我也可以使用app_remove事件,但现在已足够了.从iTunesConnect或Playstore,他们只提供用户保留数据,例如x天后仍有多少用户使用您的应用,或者每天卸载,这不是我想要的.
我需要我的端点以以下 json 格式返回数据:
{
"code": "SUCCESS",
"message": "SUCCESS",
"errors": null,
"data": []
}
Run Code Online (Sandbox Code Playgroud)
这是我的控制器代码:
@GetMapping(value = "/productSubcategories", produces = MediaType.APPLICATION_JSON_VALUE)
public Flux<MyDTO> getMyObjects() {
return myObjectService.getAll()
.map(myObject -> modelMapper.map(productSubcategory, MyObject.class));
}
Run Code Online (Sandbox Code Playgroud)
将所有 MyDTO 对象包装在 json 响应的“数据”部分中的最佳方法是什么?
使用时,尝试访问嵌套对象时遇到问题BooleanBuilder。我已经读过默认值是2级,但是对于我的用例,我需要访问3级嵌套对象。因此,我已经添加@QueryInit了许多其他答案中指出的内容。但是我仍然无法访问它。这是我的代码:
@Document
public class Order implements Serializable {
@QueryInit(*.*)
private Item item;
}
public class Item implements Serializable {
private Details details;
}
public class Details implements Serializable {
private String name;
}
public static BooleanExpression name(String name) {
QOrder order = QOrder.order;
return order.item.details.name.eq(name)
}
Run Code Online (Sandbox Code Playgroud)
我有QOrder,QItem生成了类并且可以正常工作。但是details.description给出了错误,因为QDetails未生成类。我如何使其生成QDetails?
我写了一个简单的网络刮刀来抓expedia.com.使用Java Selenium HtmlUnitDriver,如果我在本地运行它,我能够成功从网站上抓取数据.
然而,当我上到EC2服务器部署此,它总是返回我在哪里Expedia的检测它作为一个机器人的页面,因此,它会显示这个验证码,以证明人类正在访问它.
我认为它可能与ecpedia服务器的IP地址有关,这些服务器被expedia.com以某种方式列入黑名单?
我试过抓不同的网站,他们不关心/不做人体测试.
知道如何解决这个问题吗?
我尝试但仍被检测为机器人的东西:
更新:实际设置代理服务器给我一个不同的错误:
当前网址为https://www.expedia.com/things-to-do/search?location=Paris&pageNumber=1
htmlString:
<!--?xml version="1.0" encoding="ISO-8859-1"?-->
<html>
<head>
<title>
500 Internal Server Error
</title>
</head>
<body>
<h1> Internal Server Error </h1>
<p> The server encountered an internal error or misconfiguration and was unable to complete your request. </p>
<p> Please contact the server administrator at [no address given] to inform them of the time this error occurred, and the actions you performed just before this error. </p>
<p> More …Run Code Online (Sandbox Code Playgroud) selenium htmlunit web-scraping selenium-webdriver htmlunit-driver
{ _id: 1, results: [ "tokyo", "japan" ] }
{ _id: 2, results: [ "sydney", "australia" ] }
db.scores.find(
{ results: { $elemMatch: { $regex: *some regex* } } }
)
Run Code Online (Sandbox Code Playgroud)
如何使用 spring mongodb 数据查询条件转换这个简单的 elemMatch 示例?
如果数组包含对象我可以这样做
Criteria criteria =
Criteria.where("results").
elemMatch(
Criteria.where("field").is("tokyo")
);
Run Code Online (Sandbox Code Playgroud)
但在我的问题中,我没有“领域”
更新:
我认为 Veeram 的答案在尝试后会起作用
Criteria criteria =
Criteria.where("results").
elemMatch(
new Criteria().is("tokyo")
);
Run Code Online (Sandbox Code Playgroud)
它不返回任何内容。我错过了什么吗?
当我检查查询对象时,它指出以下内容:
Query: { "setOfKeys" : { "$elemMatch" : { }}}, Fields: null, Sort: null
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我像上面那样使用 Criteria.where("field") 修改标准,
Query: { "setOfKeys" : …Run Code Online (Sandbox Code Playgroud) 我开始学习Java的反应式编程。整个反应式范式对我来说都是新的。
在学习过程中,我遇到了几个术语/库,例如Spring WebFlux,projectreactor和RxJava。我希望有人能解释这些差异是什么,以及您在项目中使用的是哪种,以及为什么要做出这种选择。
我读到Spring WebFlux实际上在内部使用了projectreactor的Flux / Mono。这简化了Spring Webflux相对于RxJava的优缺点的问题?
java ×2
mongodb ×2
querydsl ×2
spring-data ×2
apache-kafka ×1
concurrency ×1
firebase ×1
htmlunit ×1
ios ×1
locking ×1
meta-tags ×1
node.js ×1
nosql ×1
reactjs ×1
regex ×1
rest ×1
rx-java ×1
selenium ×1
seo ×1
spring-boot ×1
spring-kafka ×1
web-scraping ×1