小编Bic*_*ick的帖子

Rabbitmq-设计消息重播服务

我正在尝试设计一种重播机制,使用户能够重放队列中的消息.我为包含多个队列和多个消费者的交换而设计的最佳设计是:

  1. 创建一个记录器服务,它将:

    • 创建一个队列并将所有路由键绑定到该队列.
    • 消费来自交易所的所有消息.
    • 将所有消息保存到数据库.
  2. 订阅者请求重播.

    • 每个订阅者创建一个新的交换,队列并使用与其常规队列相同的绑定绑定到它.
    • 订阅者向Web服务器发送休息请求以开始使用过滤器重播(startdate等).请求包含其重播交换名称.
    • Web服务器从数据库中提取数据并将其发布到特定的交换机
    • 可以添加细化,例如附加RequestId并回显它.

在此输入图像描述

问题:
1.这有意义吗?
我发明了轮子吗?有兔子固有的解决方案吗?插入?
3.创建多个交易所是否被视为良好做法?
在此解决方案中,创建每个队列的交换以便发布相同的消息.

另一种解决方案:
1.为每个队列创建一个额外的队列"ReplayQueue".设置一个TTL(假设一个月).
2.每次用户请求重播时,让他从自己的ReplayQueue重放,而不需要进行重放.

这个解决方案有点问题,因为.

  • 为了重播最后一天,消费者必须提前29天取出并过滤掉它们.
  • 此解决方案可以扩展 - 队列将变得更大(与可以扩展的数据库存储不同).

message-queue rabbitmq replay

20
推荐指数
1
解决办法
5349
查看次数

Visual Studio 2012 - 是否有键盘快捷方式将文件从快速视图移动到打开的文件

我通常用鼠标点击"保持打开"图标.
有没有办法用键盘做到这一点?
谢谢.

visual-studio-2012

19
推荐指数
2
解决办法
1730
查看次数

为什么没有Math.floor(float)?

为什么只有Math.floor(double)?

我有一个浮动,我想把它"向下".
我必须把它加倍吗?

java

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

在单个事务中发送多个SQL命令

我有一个庞大的INSERT INTO ... 字符串列表.目前我运行它们:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    foreach (var commandString in sqlCommandList)
    {
        SqlCommand command = new SqlCommand(commandString, connection);
        command.ExecuteNonQuery();
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到每个ExecuteNonQuery()也执行提交.

  1. 有没有办法在单个事务中插入所有行(最后提交)?
  2. 我想要一个单一事务的原因是让我的"插入"过程更快.单笔交易是否也会更快?

.net c# sql-server

17
推荐指数
3
解决办法
5万
查看次数

RabbitMQ - 升级到新版本并获得了很多"PRECONDITION_FAILED未知交付标签1"

刚刚升级到RabbitMQ的新版本 - 2.3.1 - 现在出现以下错误:

PRECONDITION_FAILED unknown delivery tag 1  
Run Code Online (Sandbox Code Playgroud)

...随后关闭频道.这适用于较旧的RabbitMQ,没有客户端更改.


在应用程序行为方面:

当App A想要向App b发送异步消息并从B接收答案时,这是算法:

  1. 应用A生成唯一ID并将其放入消息对象中
  2. 然后,App A订阅一个新的队列,队列名称和路由键都等于uuid.
  3. 应用B打开消息,进行一些计算并使用收到的路径将结果返回到通道.
  4. 应用A获得答案并关闭队列.

到目前为止,1.7.0一切都很顺利.2.3.1出了什么问题?


当应用程序A调用时basicPublish(),应用程序B立即抛出以下异常:

com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED - unknown delivery tag 1,class-id=60,method-id=80),null,""}
    at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:191)
    at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:159)
    at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:110)
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:438)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.close>(reply-code=406,reply-text=PRECONDITION_FAILED - unknown delivery tag 1,class-id=60,method-id=80),null,""}
Run Code Online (Sandbox Code Playgroud)

rabbitmq

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

实体框架 - 打印EntityValidationErrors以进行记录

我打印日志时遇到了follo_wing错误

Message: Validation failed for one or more entities. See 'EntityValidationErrors'  
property for more details.; Stack Trace:    at 
System.Data.Entity.Internal.InternalContext.SaveChanges()
Run Code Online (Sandbox Code Playgroud)

EntityValidationErrors对象在不同节点中保存完整的详细错误.打印它的最佳方式是什么?

c# logging entity-framework entity-framework-4

16
推荐指数
3
解决办法
1万
查看次数

Java 8 - 重试方法,直到满足条件(间隔)

我想创建一个可以运行方法的类,直到满足返回值的条件.

看起来应该是这样的

methodPoller.poll(pollDurationSec, pollIntervalMillis)
            .method(dog.bark())
            .until(dog -> dog.bark().equals("Woof"))
            .execute();
Run Code Online (Sandbox Code Playgroud)

我的方法poller看起来有点像这个()//跟随GuiSim回答

public class MethodPoller {
    Duration pollDurationSec;
    int pollIntervalMillis;


    public MethodPoller() {
    }

    public MethodPoller poll(Duration pollDurationSec, int pollIntervalMillis) {
        this.pollDurationSec = pollDurationSec;
        this.pollIntervalMillis = pollIntervalMillis;
        return this;
    }

    public <T> MethodPoller method(Supplier<T> supplier) {

        return this;
    }

    public <T> MethodPoller until(Predicate<T> predicate) {

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

但是我很难从这里开始.
在满足条件之前,如何实现对常规方法的重试?
谢谢.

java hamcrest java-8

16
推荐指数
3
解决办法
1万
查看次数

visual studio远程调试 - 在同一个域中找不到计算机

我已在同一域中的远程计算机上安装了Visual Studio 2012远程工具.
我可以ping和telnet连接到定义的端口.

当我打开"附加到进程"对话框并且VS找不到它时,我正试图找到服务器.(我尝试输入其IP和名称)

任何的想法?

remote-debugging visual-studio-2012

15
推荐指数
1
解决办法
9107
查看次数

用gson反序列化泛型

我正在使用GSON 1.4并使用两个泛型序列化一个对象,arraylist<myObject>如下所示 String data = Gson.toJson(object, object.class).当我想要它时,我做到了gson.fromJson(json, type);

可悲的是,我明白了

java.lang.IllegalArgumentException:无法将java.util.ArrayList字段...设置为java.util.LinkedList

这是为什么 ?GSON doc指出,如果我使用object.class参数序列化它支持泛型.任何的想法?谢谢.

我的班级是:

public class IndicesAndWeightsParams {

    public List<IndexParams> indicesParams;
    public List<WeightParams> weightsParams;

    public IndicesAndWeightsParams() {
        indicesParams = new ArrayList<IndexParams>();
        weightsParams = new ArrayList<WeightParams>();
    }
    public IndicesAndWeightsParams(ArrayList<IndexParams> indicesParams, ArrayList<WeightParams> weightsParams) {
        this.indicesParams = indicesParams;
        this.weightsParams = weightsParams;
    }
}    
public class IndexParams {

    public IndexParams() {
    }
    public IndexParams(String key, float value, String name) {
      this.key = key;
      this.value = value;
      this.name = name;
    } …
Run Code Online (Sandbox Code Playgroud)

generics json gson

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

如何从唯一的字符串生成唯一的int?

我有一个带有String的对象,该String包含唯一的id.(例如"ocx7gf"或"67hfs8")我需要为它提供一个int hascode()的实现,这显然是唯一的.

如何以最简单/最快的方式将字符串转换为唯一的int?

10X.

编辑 - 好的.我已经知道String.hashcode是可能的.但不建议在任何地方使用.实际上'如果不推荐任何其他方法 - 我是否应该使用它,如果我的对象在集合中,我需要哈希码.我应该将其连接到另一个字符串以使其更成功吗?

java casting unique

14
推荐指数
3
解决办法
4万
查看次数