rsocket / rsocket-kotlin

RSocket Kotlin multi-platform implementation
http://rsocket.io
Apache License 2.0
552 stars 37 forks source link

513[ApplicationError] Message: Destination '' does not support REQUEST_STREAM #217

Closed nikedlab closed 2 years ago

nikedlab commented 2 years ago

I have na issue with requesting stream from our server. We have auth by token and I need to subscribe to specified route. I made a client looking onto examples but my code doesn’t work and I unable to find out any suggestion how to fix it

There is my code

val okHttpClient = HttpClient(OkHttp) {
            install(WebSockets)
            install(RSocketSupport) {
                connector = RSocketConnector {
                    connectionConfig {
                        keepAlive = KeepAlive(
                            interval = 60.seconds,
                            maxLifetime = 180.seconds
                        )
                        setupPayload {
                            buildPayload {
                                compositeMetadata {
                                    add(BearerAuthMetadata(token))
                                }
                                data(ByteReadPacket.Empty)
                            }
                        }
                        payloadMimeType = PayloadMimeType(
                            data = "application/octet-stream",
                            metadata = "message/x.rsocket.authentication.v0"
                        )
                        loggerFactory = LoggerFactory {
                            PrintLogger.withLevel(LoggingLevel.TRACE).logger(">>>>>>>>>>> CLIENT   |$it")
                        }
                    }
                }
            }
        }
        coroutineScope.launch {
            val socket: RSocket = okHttpClient.rSocket("wss://my.domain.com/ws")
            socket.requestStream(buildPayload {
                metadata {
                    RoutingMetadata("subscribe.user")
                }
                data(ByteReadPacket.Empty)
            }).catch { e ->
                println(e)
            }.map {
                it.data.readText()
            }.onEach(handler::emit).launchIn(this)
        }

and there is logs

[DEBUG] (>>>>>>>>>>> CLIENT   |io.rsocket.kotlin.frame) Send:
 Setup frame -> Stream Id: 0 Length: 854
 Flags: 0b100000000 (M1R0L0)
 Version: 1.0 Honor lease: false
 Keep alive: interval=60000 ms,max lifetime=180000 ms
 Data mime type: application/octet-stream
 Metadata mime type: message/x.rsocket.authentication.v0
 Metadata(length=772):
          +-------------------------------------------------+
          |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
 +--------+-------------------------------------------------+----------------+
 |00000000| fc 00 03 00 81 65 79 4a 34 4e 58 51 6a 55 7a 49 |������eyJ4NXQjUzI��������������������������������|
 |00000010| 31 4e 69 49 36 49 6b 74 55 61 33 55 32 53 31 56 |1NiI6IktUa3U2S1V��������������������������������|
 |00000020| 49 52 47 70 74 5a 46 6f 74 63 32 39 71 51 32 70 |IRGptZFotc29qQ2p��������������������������������|
 |00000030| 54 4c 55 5a 53 59 31 64 45 63 33 6c 78 4d 32 64 |TLUZSY1dEc3lxM2d��������������������������������|
 |00000040| 50 62 6a 56 58 53 6d 78 72 57 47 70 79 4d 58 4d |PbjVXSmxrWGpyMXM��������������������������������|
 |00000050| 69 4c 43 4a 72 61 57 51 69 4f 69 4a 6b 5a 58 59 |iLCJraWQiOiJkZXY��������������������������������|
 |00000060| 75 61 57 78 73 64 57 31 35 4c 6d 4e 76 62 53 49 |uaWxsdW15LmNvbSI��������������������������������|
 |00000070| 73 49 6d 46 73 5a 79 49 36 49 6c 4a 54 4d 6a 55 |sImFsZyI6IlJTMjU��������������������������������|
 |00000080| 32 49 6e 30 2e 65 79 4a 7a 64 57 49 69 4f 69 4a |2In0.eyJzdWIiOiJ��������������������������������|
 |00000090| 32 61 57 4e 30 62 33 49 69 4c 43 4a 68 64 57 51 |2aWN0b3IiLCJhdWQ��������������������������������|
 |000000a0| 69 4f 69 4a 70 62 47 78 31 62 58 6b 74 5a 47 56 |iOiJpbGx1bXktZGV��������������������������������|
 |000000b0| 32 4c 58 64 6c 59 69 31 6a 62 47 6c 6c 62 6e 51 |2LXdlYi1jbGllbnQ��������������������������������|
 |000000c0| 69 4c 43 4a 75 59 6d 59 69 4f 6a 45 32 4e 44 6b |iLCJuYmYiOjE2NDk��������������������������������|
 |000000d0| 7a 4e 44 55 30 4e 7a 51 73 49 6e 5a 76 53 56 42 |zNDU0NzQsInZvSVB��������������������������������|
 |000000e0| 44 63 6d 56 6b 5a 57 35 30 61 57 46 73 49 6a 6f |DcmVkZW50aWFsIjo��������������������������������|
 |000000f0| 69 4d 54 49 7a 4e 44 55 32 4e 7a 67 35 4d 47 46 |iMTIzNDU2Nzg5MGF��������������������������������|
 |00000100| 69 59 32 52 6c 49 69 77 69 61 58 4e 7a 49 6a 6f |iY2RlIiwiaXNzIjo��������������������������������|
 |00000110| 69 61 48 52 30 63 48 4d 36 58 43 39 63 4c 32 46 |iaHR0cHM6XC9cL2F��������������������������������|
 |00000120| 77 63 43 35 6b 5a 58 59 75 61 57 78 73 64 57 31 |wcC5kZXYuaWxsdW1��������������������������������|
 |00000130| 35 4c 6d 4e 76 62 56 77 76 64 57 46 68 49 69 77 |5LmNvbVwvdWFhIiw��������������������������������|
 |00000140| 69 5a 58 68 77 49 6a 6f 78 4e 6a 51 35 4d 7a 51 |iZXhwIjoxNjQ5MzQ��������������������������������|
 |00000150| 35 4d 44 63 30 4c 43 4a 70 59 58 51 69 4f 6a 45 |5MDc0LCJpYXQiOjE��������������������������������|
 |00000160| 32 4e 44 6b 7a 4e 44 55 30 4e 7a 51 73 49 6e 56 |2NDkzNDU0NzQsInV��������������������������������|
 |00000170| 7a 5a 58 4a 4a 5a 43 49 36 49 6d 59 34 4e 32 55 |zZXJJZCI6ImY4N2U��������������������������������|
 |00000180| 77 4f 47 49 34 4c 54 46 68 4e 32 49 74 4e 47 49 |wOGI4LTFhN2ItNGI��������������������������������|
 |00000190| 7a 59 79 31 68 5a 44 41 78 4c 57 5a 68 4d 44 67 |zYy1hZDAxLWZhMDg��������������������������������|
 |000001a0| 31 5a 6a 45 35 59 6d 5a 6b 4d 53 4a 39 2e 4c 68 |1ZjE5YmZkMSJ9.Lh��������������������������������|
 |000001b0| 55 58 39 69 6e 6f 70 32 63 69 44 56 6a 35 58 37 |UX9inop2ciDVj5X7��������������������������������|
 |000001c0| 46 38 52 41 51 51 61 70 44 4f 30 38 4a 4c 53 41 |F8RAQQapDO08JLSA��������������������������������|
 |000001d0| 54 56 44 76 42 47 78 55 79 6e 49 6f 78 4c 36 57 |TVDvBGxUynIoxL6W��������������������������������|
 |000001e0| 7a 65 75 70 61 32 62 34 56 64 5f 30 38 2d 78 47 |zeupa2b4Vd_08-xG��������������������������������|
 |000001f0| 54 75 77 54 65 53 6e 77 42 46 68 50 46 41 70 31 |TuwTeSnwBFhPFAp1��������������������������������|
 |00000200| 30 36 44 6a 63 6d 7a 71 6f 36 43 75 4e 4e 70 36 |06Djcmzqo6CuNNp6��������������������������������|
 |00000210| 37 46 70 35 32 6b 56 77 46 78 4d 5f 6a 59 36 33 |7Fp52kVwFxM_jY63��������������������������������|
 |00000220| 79 34 7a 72 49 72 52 61 47 30 4f 41 50 56 6a 6b |y4zrIrRaG0OAPVjk��������������������������������|
 |00000230| 36 57 6c 53 56 53 4d 64 42 78 57 63 46 56 59 75 |6WlSVSMdBxWcFVYu��������������������������������|
 |00000240| 48 54 67 78 41 6f 57 54 61 38 54 47 6f 65 72 69 |HTgxAoWTa8TGoeri��������������������������������|
 |00000250| 70 39 5f 4b 7a 61 30 7a 6d 47 61 6d 6d 62 6c 77 |p9_Kza0zmGammblw��������������������������������|
 |00000260| 68 50 42 74 6a 51 57 47 78 56 67 57 57 57 73 78 |hPBtjQWGxVgWWWsx��������������������������������|
 |00000270| 32 6b 4e 44 69 48 64 69 62 47 63 67 57 31 6a 55 |2kNDiHdibGcgW1jU��������������������������������|
 |00000280| 38 58 31 48 64 6c 34 6e 72 54 79 41 66 57 73 49 |8X1Hdl4nrTyAfWsI��������������������������������|
 |00000290| 64 56 53 35 38 78 77 45 74 5a 63 36 58 38 48 43 |dVS58xwEtZc6X8HC��������������������������������|
 |000002a0| 41 30 4f 38 58 59 5a 51 64 66 64 33 34 48 51 63 |A0O8XYZQdfd34HQc��������������������������������|
 |000002b0| 73 52 2d 65 75 67 52 74 6e 47 79 6d 48 4a 4b 4d |sR-eugRtnGymHJKM��������������������������������|
 |000002c0| 44 75 5f 5a 32 59 4c 43 36 7a 6b 6a 45 64 65 4e |Du_Z2YLC6zkjEdeN��������������������������������|
 |000002d0| 2d 64 50 6d 52 34 7a 47 34 76 2d 6e 68 6c 4e 79 |-dPmR4zG4v-nhlNy��������������������������������|
 |000002e0| 54 34 63 62 61 2d 38 56 6c 5a 5f 64 53 61 4f 32 |T4cba-8VlZ_dSaO2��������������������������������|
 |000002f0| 6d 45 5a 6b 31 6a 6e 54 68 61 6a 41 5a 46 33 79 |mEZk1jnThajAZF3y��������������������������������|
 |00000300| 4c 6f 30 51                                     |Lo0Q��������������������������������������������������������            |
 +--------+-------------------------------------------------+----------------+
 Data: Empty
 [DEBUG] (>>>>>>>>>>> CLIENT   |io.rsocket.kotlin.frame) Send:
 RequestStream frame -> Stream Id: 1 Length: 13
 Flags: 0b100000000 (M1F0C0N0)
 Initial request: 64
 Metadata: Empty
 Data: Empty
 [DEBUG] (>>>>>>>>>>> CLIENT   |io.rsocket.kotlin.frame) Receive:
 Error frame -> Stream Id: 1 Length: 106
 Flags: 0b000000000 ()
 Error code: 513[ApplicationError] Message: Destination '' does not support REQUEST_STREAM. Supported interaction(s): [SETUP, METADATA_PUSH]

Please help me to figure out what I'm doing wrong? Is it my or server side issue?

olme04 commented 2 years ago

Hey, looks like you just build empty metadata in request. It should be:

metadata(RoutingMetadata("subscribe.user"))

instead of:

metadata {
  RoutingMetadata("subscribe.user")
}

when building payload via buildPayload

nikedlab commented 2 years ago

Hey @olme04 Thank you for answer I've checked this way also and having another error

Screenshot 2022-04-08 at 10 54 47 Screenshot 2022-04-08 at 10 49 50
olme04 commented 2 years ago

I see, that you are using composite metadata in setup payload, so looks like your server only supports it. So you should also use composite metadata (same as you used in setup payload) for requests:

buildPayload {
  compositeMetadata {
    add(RoutingMetadata("subscribe.user"))
  }
  data(ByteReadPacket.Empty)
}

Also, it will be better to change metadata mime type in setup payload to composite metadata:

payloadMimeType = PayloadMimeType(
  data = WellKnownMimeType.ApplicationOctetStream,
  metadata = WellKnownMimeType.MessageRSocketCompositeMetadata
)

I don't now about your server implementation, but this can also affect how it will decode metadata. In this case, you should also use compositeMetadata builder in all future requests.

nikedlab commented 2 years ago

Finally! Thank you So problem was in wrong mime type for metadata

olme04 commented 2 years ago

I'm glad that I could help you!