小编hpi*_*tyu的帖子

Azure Java Tomcat日志记录

我打算将以前创建的Java Web应用程序迁移到Azure.以前用于log4j应用程序级别日志的应用程序,保存在本地创建的文件中.问题是,Azure角色具有多个实例,我必须收集并聚合这些日志,并确保它们存储在永久存储中而不是虚拟机硬盘中.

日志记录是应用程序的关键组件,但它不能减慢实际工作的速度.我考虑了多种选择,我很好奇最佳实践,考虑安全性,日志一致性和存储时间以及后续处理的性能的最佳解决方案.以下是选项列表:

  • 将log4j与自定义Appender一起使用以在Azure SQL中存储信息.
  • 将log4j与自定义Appender一起使用以在Azure表存储中存储信息.
  • 编写一个额外的工具,将数据从本地硬盘驱动器传输到上述任一持久存储器.

是否有任何其他方法或针对Java的此问题是否有任何完整的解决方案?考虑到上述标准,上述哪一项最佳?

java logging tomcat azure azure-diagnostics

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

使用相同的HTTPS客户端证书在并发会话上获取413错误

我有以下问题.

我在IIS 8上托管WCF应用程序,它只接受带有客户端证书的HTTPS请求.此服务接受POST消息,其大小可能不同(从几个字节到1 GB),并且大多数时间是并行接收的.

在以下情况下,客户端获得413 Request实体的响应太大:

  • 使用相同的客户端证书打开多个连接时,会上载许多小文件.在这种情况下,一个请求成功,所有其他请求失败,出现413错误.

可以通过将uploadReadAheadSize值设置为比system.webServer/serverRuntime配置部分中所有并行调用大小的总和更大的值来解决此问题,但这会导致服务器为每个调用分配预读缓冲区的全部内存量,在许多并发调用的情况下,服务器会耗尽内存.

如果使用不同的客户端证书进行调用或上传一个大文件,则我的配置有效.

我已经读过,在IIS 6中,有一个选项可以SSLAlwaysNegoClientCert在配置中设置以修复类似的错误.我已尝试过设置此值的变通方法,但未使用IIS 8.0成功.我也尝试关闭SSL客户端缓存以禁用SSL会话恢复,但这也没有解决我的问题.

什么可能导致413错误?有没有办法在不使用服务器的整个内存的情况下,使用客户端证书启用多个并行上载到同一服务器.

iis ssl wcf iis-8

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

Azure表删除和创建表失败

我的问题是我不时想从Java中删除Azure表的内容.该表有数百万行,因此它似乎不是逐个删除所有实体的好方法(因为许多REST API调用).

我试图删除然后再次创建表,但我的代码失败了.

getTableClient().deleteTableIfExists("tablename");
getTableClient().createTableIfNotExists("tablename");
Run Code Online (Sandbox Code Playgroud)

这是我的堆栈跟踪:

com.microsoft.windowsazure.services.table.client.TableServiceException: Conflict
at com.microsoft.windowsazure.services.table.client.TableServiceException.generateTableServiceException(TableServiceException.java:57)
at com.microsoft.windowsazure.services.table.client.TableOperation$2.execute(TableOperation.java:339)
at com.microsoft.windowsazure.services.table.client.TableOperation$2.execute(TableOperation.java:322)
at com.microsoft.windowsazure.services.core.storage.utils.implementation.ExecutionEngine.executeWithRetry(ExecutionEngine.java:110)
at com.microsoft.windowsazure.services.table.client.TableOperation.performInsert(TableOperation.java:374)
at com.microsoft.windowsazure.services.table.client.TableOperation.execute(TableOperation.java:551)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.execute(CloudTableClient.java:638)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTable(CloudTableClient.java:173)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTableIfNotExists(CloudTableClient.java:251)
at com.microsoft.windowsazure.services.table.client.CloudTableClient.createTableIfNotExists(CloudTableClient.java:197)
Run Code Online (Sandbox Code Playgroud)

我需要在两次通话之间睡一会儿吗?我宁愿不要在这里等待太久,因为我想让这个操作尽可能短,以便其他线程可以在表中再次写入.

或者有一种安全的方法吗?


编辑

是的,我正在寻找一个等效的SQL语句:DELETE FROM tablename;在Azure表中尽可能少的REST API调用.

我目前最好的镜头是:

getTableClient().deleteTableIfExists("tablename");
// TODO: solve problem with new creation!
boolean success = false;
while (!success) {
try {
  success = getTableClient().createTableIfNotExists("tablename");
} catch (StorageException e) {
  System.err.println("Log table recreation failed retrying in 5 sec");
  try {
    Thread.sleep(5000);
  } catch (InterruptedException ex) …
Run Code Online (Sandbox Code Playgroud)

java azure azure-table-storage

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

标签 统计

azure ×2

java ×2

azure-diagnostics ×1

azure-table-storage ×1

iis ×1

iis-8 ×1

logging ×1

ssl ×1

tomcat ×1

wcf ×1