标签: fifo

如何扩展 SQS FIFO 队列多个侦听器

我有三个 SQS FIFO 队列,其中每个队列在 EC2 实例中都有一个数据投影侦听器守护进程作为 docker pod(SQL Server、PostgreSQL、Elastic Search 等)

所有队列都具有如下相同的设置(死信队列稍后设置)。

Queue Type: FIFO    
Messages Delayed:   0
Content-Based Deduplication:    Enabled
Default Visibility Timeout: 30 seconds
Message Retention Period:   14 days
Maximum Message Size:   256 KB
Run Code Online (Sandbox Code Playgroud)

这是我正在使用 DynamoDB Stream => Lambda SQS Router => SQS FIFO Queues 设计的事件溯源架构的一部分(由于 SNS 不支持 FIFO 队列作为订阅者)

Content-Based Deduplication启用以避免队列中出现重复消息,因为任何队列的 Lambda 路由器中始终可能出现错误。

现在,我还将每条消息的 AggregateId 设置MessageGroupId为对它们进行分组,但并不真正了解消费者端如何使用它;

目前,每个 SQS 队列只有一个消费者,但如果我想扩展消费者怎么办?应用程序需要确保多个消费者不会处理来自同一 MessageGroupId 的消息;- 这是不可接受的,因为使用 FIFO 队列是由于系统中事件的顺序保留!

fifo amazon-sqs amazon-web-services event-sourcing .net-core

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

Linux内核/ proc FIFO /管道

我目前正在尝试创建一个内核模块,它将根据内核事件生成数据并将它们推送到文件中.在读到这很糟糕(并且我同意)之后,我认为将数据放在/ proc文件中会更有意义,用户程序可以在必要时从中获取数据.但是,这个想法导致了各种各样的问题,特别是何时以及如何清除这个文件.所以我想......"为什么我不在/ proc中创建命名管道并从中读取?"

我已经掌握了为proc文件设置读取函数和写入函数的一般要点,但是我仍然遇到了如何解决这个问题的概念性问题.也就是说,我如何编写这样一个函数来获取任意数据并将其从内核写入这样的管道?有没有人知道如何将数据从内核空间推送到命名管道?最后,它不具备成为一个/ proc文件(特别是如果这是我的错,这样做),但是这是我得出的结论.然后我将不得不弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题.

linux kernel pipe fifo procfs

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

*nix:"echo'start working'> /etc/.example":这是如何实现的?

假设有人在终端中执行以下操作:

echo 'start working' > /etc/.example
Run Code Online (Sandbox Code Playgroud)

当执行此操作时,示例程序将"开始工作".

在UNIX(类似)系统上,如何实现这样的行为,这种行为被称为什么?

c unix ipc file fifo

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

双向FIFO

我想实现双向fifo.下面的代码正在运行,但它没有使用双向fifo.我在互联网上搜索过,但没有找到任何好的例子......

我怎样才能做到这一点?

谢谢,

WRITER.c:

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/types.h>

#include <sys/wait.h>
#include <fcntl.h>



#define MAXLINE 4096

#define READ 0

#define WRITE 1


int main (int argc, char** argv)
{
 int a, b, fd;

 do {
   fd=open("/tmp/myfifo",O_WRONLY);
   if (fd==-1) sleep(1);
  } while (fd==-1);

  while (1) {
   scanf("%d", &a);
   scanf("%d", &b);

   write(fd,&a,sizeof(int));
   write(fd,&b,sizeof(int));

   if (a == 0 && b == 0)
   {
    break;
   }

  }

  close(fd);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

READER.c:

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/types.h>

#include …
Run Code Online (Sandbox Code Playgroud)

c fifo

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

C#阻塞FIFO队列可以泄漏消息吗?

我正在开发一个学术开源项目,现在我需要在C#中创建一个快速阻塞FIFO队列.我的第一个实现只是在读者的信号量中包含一个同步队列(带有动态扩展),然后我决定以下面的方式重新实现(理论上更快)

public class FastFifoQueue<T>
{
    private T[] _array;
    private int _head, _tail, _count;
    private readonly int _capacity;
    private readonly Semaphore _readSema, _writeSema;

    /// <summary>
    /// Initializes FastFifoQueue with the specified capacity
    /// </summary>
    /// <param name="size">Maximum number of elements to store</param>
    public FastFifoQueue(int size)
    {
        //Check if size is power of 2
        //Credit: http://stackoverflow.com/questions/600293/how-to-check-if-a-number-is-a-power-of-2
        if ((size & (size - 1)) != 0)
            throw new ArgumentOutOfRangeException("size", "Size must be a power of 2 for this queue to work");

        _capacity = size; …
Run Code Online (Sandbox Code Playgroud)

c# queue concurrency fifo interlocked-increment

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

通过FIFO重定向stdin

我在GNU/Linux下运行一个服务器应用程序(用Java编写),它接受输入(来自stdin,我猜)并解释它运行一些命令.我不想在终端窗口中运行应用程序(我想运行一个守护进程),但我仍然希望能够随时输入命令.我以为我可以用fifos做到这一点,所以我用mknod创建它.问题是cat fifofile> java ...cat fifofile | java ...由于某种原因失败并显示"找不到文件"错误.

仅使用cat进行读写,fifo可以完美地工作.

有没有办法解决这个问题,或者以其他方式实现同​​样的目标?

linux shell stdin fifo mknod

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

LRU与FIFO对比随机

当出现页面错误或高速缓存未命中时,我们可以使用最近最少使用(LRU),先进先出(FIFO)或随机替换算法.我想知道,哪一个提供最佳性能,又称最不可能的未来缓存未命中'/页面错误?

架构:Coldfire处理器

hardware algorithm fifo lru

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

带有2个VHDL时钟的FIFO

我有一个vhdl赋值问题.我需要在500MHz的总线和另一个30MHz的总线之间创建一个FIFO缓冲区.

我设计了一个基本的FIFO缓冲区

输入:Data_in,Write_EN,CLK_500,Read_EN,CLK_30,FlushFIFO.

输出:Data_out,FULL,EMPTY.

此缓冲区使用2D数组设计:

type fifo_arr is array (0 to 63) of std_logic_vector(39 downto 0);
signal FIFO : fifo_arr := (others => (others => '0'));
Run Code Online (Sandbox Code Playgroud)

问题如下:我应该如何编写进程并在它们之间维护指针以进行同步?使用我尝试过的方法,代码将不会合成(错误:XST:827信号ptr无法合成)

有任何想法吗?

感谢致敬

clock vhdl fifo clock-synchronization

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

Queue接口的add()和offer()方法之间的区别

我在Java中使用FIFO实现并遇到了这个java.util.Queue接口.Dequeue实现它,而后者又由Linked List实现.

我写了以下代码

public class FIFOTest {

    public static void main(String args[]){

        Queue<String> myQueue = new LinkedList<String>();
        myQueue.add("US");
        myQueue.offer("Canada");

        for(String element : myQueue){
            System.out.println("Element : " + element);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

两者似乎也做同样的事情.将数据添加到队列的头部.这两种方法有什么区别?任何特殊情况下哪一种比其他情况更有益?

java queue fifo

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

C++优先级队列不遵循FIFO顺序

我正在使用STL priority_queue来收集我自己的类Lettura的对象.

//---------LETTURA----------

enum Priority {zero, standard, urgent};

class Lettura{
public:
int valore;
char sensore;
Priority priorita;

Lettura():  valore(0),sensore('\0'),priorita(zero){}
Lettura(const int val, const char s='\0', const Priority p=zero):  valore(val),sensore(s), priorita(p){}

friend ostream& operator<<(ostream& out, const Lettura & lett);
};
Run Code Online (Sandbox Code Playgroud)

我希望它们按照渐进式"priorita"的顺序弹出,但我也希望在普通队列中使用FIFO策略弹出相同优先级的元素.我以随机顺序获得相同优先级的元素:

top: l5  urgent
top: l1  standard
top: l4  standard
top: l6  standard
top: l2  standard
top: l3  standard
Run Code Online (Sandbox Code Playgroud)

我希望FIFO顺序中具有相同优先级的元素:

top: l5  urgent
top: l1  standard
top: l2  standard
top: l3  standard
top: l4  standard
top: l6  standard
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ priority-queue fifo

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