Skip to content

The first of multiple enabled Transports is used #7378

@DSanchen

Description

@DSanchen

Version Information
Version of Akka.NET? - 1.5.30
Which Akka.NET Modules? - Akka.Remote, Akka.Hosting

Describe the bug
It seems to me that the remote actor system chooses the first enabled transport as the (only) one to communicate payload data to a local actor system, no matter which transport the local actor system specified in the actor selection.

To Reproduce

I tested four setups with two Transports: using my own NamedPipe-Transport (that - as the name suggests - uses Windows Named Pipes as communication medium, specifying "akka.pipe" as protocol) AND the default DotNetty.TCP (with the default akka.tcp protocol). Both the remote and the local actor system enable the two transports. On the remote actor system I switch the order of the enabled transports, in the local actor system I use the actor selection based on the different transport-protocols. I'm tracing network traffic with Wireshark looking at the loopback interface (as my tests are on the same machine), filtering on the port that I specify in the actor system configuration (e.g. port 5001).

  1. Remote actor system enabled-transports [ pipe, tcp ], client actor selection is akka.pipe://... - Sending this actor messages, I CANNOT see any data with wireshark - This is what I would expect, as all communication is done over "my" named pipe transport.
  2. Remote actor system enabled-transports: [ pipe, tcp ], client actor selection is akka.tcp://... - Sending this actor messages, I CANNOT see payload data with wireshark on port 5001. What I DO see is probably the association process, and some sort of heartbeat Messages every few seconds. Here I would expect, that all communication would be done using tcp as I selected akka.tcp from the local actor system.
  3. Remote actor system enabled-transports: [ tcp, pipe ], client actor selection is akka.tcp://... - Sending this actor messages, I see association, payload data and heartbeat messages - This is what I would expect, as I specified akka.tcp from the local actor system.
  4. Remote actor system enabled-transports: [ tcp, pipe ], client actor selection is akka.pipe://... - Sending this actor messages, I AGAIN see all communication data (association, payload, heartbeat) in wireshark. Here I would have expected to see no communication at all, as the local actor system wanted to use the akka.pipe protocol.

Environment
Windows, .NET 8.0

Additional context
Problem is: When the remote actor system specifies enabled-transports: [ pipe, tcp ] and the local actor system (this time running on another machine) wants to connect to the remote actor system using actor selection as akka.tcp://... no communication at all takes place, as (obviously) no named pipe can be established between the two machines.

Am I doing something wrong or have I misunderstood the Idea of having multiple transports ?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions