The AI Agent Wars: Telegram vs WhatsApp vs Messenger vs Instagram

Every Platform Picked a Side Two API changes, six weeks apart, tell you everything about where the AI agent war in messaging is heading. On December 31, 2025, Telegram shipped Bot API 9.3 with a new method called sendMessageDraft — “allowing partial messages to be streamed to a user while being generated.” A first-class streaming primitive, designed explicitly for LLM traffic, available to every developer with a bot token. On January 15, 2026, Meta’s updated WhatsApp Business terms took effect: general-purpose AI assistants are banned from the WhatsApp Business API. ChatGPT, Perplexity, and every other horizontal assistant that had been quietly building distribution on WhatsApp had to leave. ...

July 18, 2026 · 25 min · Alisher Alimov

Reactive Source-Sink: Benchmarking Backpressure in Pulsar Pipelines

Introduction Does wrapping a blocking Pulsar consumer in Flux.generate give you backpressure? Does adding backpressure cost you throughput? The first answer is no — wrapping blocking calls in Reactor operators creates something that looks reactive but behaves like a fire hose. The second answer is also no: a properly implemented reactive pipeline is dramatically faster than both alternatives. Our JMH benchmark shows the reactive approach hitting 6.29 million messages/sec — 27x faster than the Flux-wrapped approach (232k msg/sec) and 24,800x faster than plain blocking (253 msg/sec). The reactive pipeline is faster because it does less work per message: no thread blocking, no Mono.fromCallable allocation, no boundedElastic scheduling overhead. ...

April 7, 2026 · 16 min · Alisher Alimov

Apache Pulsar vs Kafka: Benchmarking Producer Throughput and Consumer Scaling — Part 2

Introduction Part 1 compared the architectural foundations of Kafka and Pulsar — storage models, subscription types, multi-tenancy, and client design. That was theory. This post puts those differences under load. We will run the same workloads against both brokers on identical hardware, using a reactive benchmark framework built with Project Reactor. The goal is not to crown a winner — it is to see where architectural decisions become measurable. Specifically, we will look at: ...

March 29, 2026 · 12 min · Alisher Alimov

Streaming LLM Responses to Telegram with Reactive Draft Messages

The Problem with Waiting Large language models are slow. A typical response takes seconds — sometimes tens of seconds — to generate. During that time, the user stares at an empty chat window, wondering if anything is happening at all. Every major LLM chat interface solved this the same way: stream tokens as they arrive. ChatGPT, Claude, Gemini — they all render partial text while the model is still thinking. The experience feels responsive even when the full response takes 15 seconds. ...

March 29, 2026 · 12 min · Alisher Alimov

Reactive Telegram Client: Polling, Pipelines, and Pulsar

From Design to Implementation In the previous article, I outlined the design goals and high-level architecture of a reactive Telegram bot framework — why non-blocking I/O matters, how separating polling from processing enables horizontal scaling, and why sealed interfaces make response dispatch type-safe at compile time. That article showed simplified code to explain the concepts. This one goes deeper. We will walk through the actual implementation: how Flux.create and expand drive the polling loop with back-pressure, how atomic variables coordinate concurrent state without locks, how the channel abstraction separates read and write concerns, and how Apache Pulsar’s reactive client integrates natively with Project Reactor. ...

March 24, 2026 · 13 min · Alisher Alimov

Building a Reactive Telegram Bot Framework with Java

Why another Telegram bot framework? Building Telegram bots is straightforward — the API is well-documented, and there are dozens of libraries in every language. However, most existing Java frameworks share the same fundamental limitation: they process updates sequentially on blocking threads. This works fine for hobby projects handling a few messages per minute, but it becomes a bottleneck the moment your bot needs to serve thousands of concurrent users, handle complex multi-step workflows, or integrate with other microservices in a distributed system. ...

March 15, 2026 · 10 min · Alisher Alimov

Streaming Data with Spring WebFlux and NDJSON

Why Stream at All The traditional Spring MVC model serializes the entire response into memory before sending it. A controller returns a List<Message>, Jackson converts it to a JSON array, and the framework writes the complete byte buffer to the socket. This works until the dataset is large, the source is slow, or both. Consider a database query that returns 10,000 rows. The blocking approach loads all rows into a List, serializes the entire JSON array, and only then begins writing to the client. Memory usage spikes, time-to-first-byte suffers, and the client waits for the slowest row before seeing anything. ...

March 9, 2025 · 8 min · Alisher Alimov

Comparing 3 Spring Boot Apps: Classic Servlet, Reactive, RSocket

Introduction This article tests three distinct Spring Boot application architectures: Classic Servlet App (Servlet) Reactive RSocket Motivation HTTP is a widely used transport for APIs, and it has pros and cons. It’s old and has big performance issues, but it is still widely used because of its ease of use. Assumptions Basic applications without best practices implementation Tests may not be identical in every aspect JVM parameters remain unoptimized for each application type Requirements Accept messages, receive lists/streams, save to database with empty response List messages by author with return of all messages Identical data feeds across all tests Measure requests per second (RPS) Message Format: ...

February 9, 2025 · 3 min · Alisher Alimov

Reactive Architecture. Theoretical Dive into Blocking Architecture

Business needs first Goals The primary objective for every software engineer is not to provide solutions with the latest modern library or architecture, the main goal is to help businesses to solve their problems. To achieve this software engineers need to provide solutions that will efficiently help to solve business problems with minimum errors and optimum costs that will help businesses be profitable in the end. This goal is critical and directly informs how we allocate our resources and design our systems. ...

February 8, 2025 · 8 min · Alisher Alimov