rabbitmq-objc-client icon indicating copy to clipboard operation
rabbitmq-objc-client copied to clipboard

RabbitMQ client for Objective-C and Swift

Results 20 rabbitmq-objc-client issues
Sort by recently updated
recently updated
newest added

Client properties cannot be modified by the user

[{"_id":"635023a53056137e2656bd66","body":"Hello , I wonder if it now supports users to modify client properties,thanks!\r\n","issue_id":1660621637544,"origin_id":800100309,"user_origin_id":14171367,"create_time":1615887032,"update_time":1615887032,"id":1666196389293,"updated_at":"2022-10-19T16:19:49.293000Z","created_at":"2022-10-19T16:19:49.293000Z"},{"_id":"635023a53056137e2656bd68","body":"\r\nHello , I wonder if it now supports users to modify client properties,thanks!","issue_id":1660621637544,"origin_id":1115697392,"user_origin_id":11517114,"create_time":1651549603,"update_time":1651549603,"id":1666196389298,"updated_at":"2022-10-19T16:19:49.298000Z","created_at":"2022-10-19T16:19:49.298000Z"},{"_id":"635023a53056137e2656bd69","body":"If the issue is still open, I doubt it. This is open source software, so you are welcome to contribute.","issue_id":1660621637544,"origin_id":1115770913,"user_origin_id":1090,"create_time":1651558424,"update_time":1651558424,"id":1666196389301,"updated_at":"2022-10-19T16:19:49.301000Z","created_at":"2022-10-19T16:19:49.301000Z"}] comment

It's not currently possible to provide a custom client property, they are hardcoded in `RMQHandshaker.m`. See https://github.com/rabbitmq/discussions/issues/15 for the background.

Need a way to create non-auto recovery RMQConnection

[{"_id":"664a30b04a8e87d14e19fe58","body":"I have the same requirement; our use case is such that we are using access tokens as passwords that are proxied through an HTTP backend for authentication. Auto-recovery fails for us because the tokens could be expired at the point of retrying the connection. \r\n\r\nI have gotten around this though, by attaching a publisher (swift Combine) to our delegate class that can be subscribed to for disconnect events. From there we can manually tear the connection down and rebuild tokens as needed.\r\n\r\nMaybe this can help others:\r\n\r\n```swift\r\n@objc class ConnectionDelegate: NSObject, RMQConnectionDelegate {\r\n\r\n var disconnectCalled = PassthroughSubject<Bool,Never>()\r\n\r\n ...\r\n\r\n func connection(_ connection: RMQConnection!, disconnectedWithError error: Error!) {\r\n disconnectCalled.send(true)\r\n }\r\n \r\n ...\r\n}\r\n\r\nlet connection_delegate = ConnectionDelegate()\r\nlet disconnect_subscription = connection_delegate!.disconnectCalled.sink { [weak self] _ in\r\n guard let self_ = self else { return }\r\n\r\n \/\/ teardown, refresh tokens, reconnect, etc...\r\n self_.doTearDownAndReconnect()\r\n}\r\n\r\n...\r\n\r\nlet connection = RMQConnection(\r\n transport: transport,\r\n config: config,\r\n handshakeTimeout: 10,\r\n channelAllocator: allocator!,\r\n frameHandler: allocator!,\r\n delegate: connection_delegate!,\r\n command: commandQueue!,\r\n waiterFactory: RMQSemaphoreWaiterFactory(),\r\n heartbeatSender: heartbeatSender!)\r\n\r\nconnection?.start()\r\n```","issue_id":1660621637548,"origin_id":1287089201,"user_origin_id":3922153,"create_time":1666364617,"update_time":1666365194,"id":1716138160413,"updated_at":"2024-05-19T17:02:40.412000Z","created_at":"2024-05-19T17:02:40.412000Z"},{"_id":"664a30b04a8e87d14e19fe59","body":"Other clients have relevant features such as:\r\n\r\n * Support for `connection.update-secret` (I may misremember the name) protocol extension introduced together with JWT authentication support\r\n * Connection lifecycle callbacks","issue_id":1660621637548,"origin_id":1287758724,"user_origin_id":1090,"create_time":1666435669,"update_time":1666435669,"id":1716138160417,"updated_at":"2024-05-19T17:02:40.417000Z","created_at":"2024-05-19T17:02:40.417000Z"},{"_id":"664a30b04a8e87d14e19fe5a","body":"While disabling recovery would be one reasonable option, both features above can be just as relevant, in particular with modern RabbitMQ versions.","issue_id":1660621637548,"origin_id":1287758829,"user_origin_id":1090,"create_time":1666435717,"update_time":1666435717,"id":1716138160421,"updated_at":"2024-05-19T17:02:40.420000Z","created_at":"2024-05-19T17:02:40.420000Z"},{"_id":"664a30b04a8e87d14e19fe5b","body":"@michaelklishin, means to inject updated secrets prior to reconnect attempts would be marvelous..","issue_id":1660621637548,"origin_id":1287952772,"user_origin_id":3922153,"create_time":1666483488,"update_time":1666483488,"id":1716138160424,"updated_at":"2024-05-19T17:02:40.424000Z","created_at":"2024-05-19T17:02:40.424000Z"}] comment

As title was told. I don't find any way to create a RMQ Connection without auto recovery. I think it is necessary option when create a connection (like Java Library)

TLS support for chained PKCS12 certificates

[{"_id":"63501f788041c95dfb0e8cae","body":"I guess I am running into this problem. In my app I want to use a .P12 certificate that trusts a self-signed CA to connect to a RabbitMQ service.\r\n\r\nThe following error is what I get:\r\n`Error Domain=kCFStreamErrorDomainSSL Code=-9831`\r\nWhich translates to:\r\n`errSSLPeerUnknownCA = -9831,\t\/* unknown Cert Authority *\/`\r\n\r\nAre there any pointers to how to enable the library to handle this case?","issue_id":1660621637552,"origin_id":484175243,"user_origin_id":7493716,"create_time":1555520334,"update_time":1555520334,"id":1666195320826,"updated_at":"2022-10-19T16:02:00.826000Z","created_at":"2022-10-19T16:02:00.826000Z"},{"_id":"63501f788041c95dfb0e8caf","body":"That is [possible already](https:\/\/github.com\/rabbitmq\/rabbitmq-objc-client\/blob\/master\/RMQClientIntegrationTests\/TLSConnectionIntegrationTest.swift).\r\n\r\nThis issue is about supporting certificate chains.\r\n[RMQTLSOptions](https:\/\/github.com\/rabbitmq\/rabbitmq-objc-client\/blob\/master\/RMQClient\/RMQTLSOptions.m) needs to parse certificate chains, peer verification mechanism should implements its traversal (or enable it in case there's a Foundation library that can do it) per [RFC 5280](https:\/\/tools.ietf.org\/html\/rfc5280), [6818](https:\/\/tools.ietf.org\/html\/rfc6818)","issue_id":1660621637552,"origin_id":484185763,"user_origin_id":1090,"create_time":1555522022,"update_time":1555522036,"id":1666195320830,"updated_at":"2022-10-19T16:02:00.830000Z","created_at":"2022-10-19T16:02:00.830000Z"},{"_id":"63501f788041c95dfb0e8cb0","body":"[CONTRIBUTING.md](https:\/\/github.com\/rabbitmq\/rabbitmq-objc-client\/blob\/master\/CONTRIBUTING.md) describes how to run TLS integration tests. [CertificateFixtures](https:\/\/github.com\/rabbitmq\/rabbitmq-objc-client\/blob\/master\/RMQClientTests\/CertificateFixtures.swift) demonstrates how example client certificate is loaded by the test suite.","issue_id":1660621637552,"origin_id":484186596,"user_origin_id":1090,"create_time":1555522155,"update_time":1555522155,"id":1666195320832,"updated_at":"2022-10-19T16:02:00.832000Z","created_at":"2022-10-19T16:02:00.832000Z"},{"_id":"63501f788041c95dfb0e8cb1","body":"I cannot comment on a single error message and our team does not use GitHub issues for investigations (that's what the RabbitMQ mailing list is for). However, it looks like it is *the client* complains about an unknown certificate authority, in which case you [must make the server CA certificate trusted](https:\/\/www.rabbitmq.com\/ssl.html#peer-verification) on the device.\r\n\r\nRabbitMQ has a [TLS troubleshooting guide](https:\/\/www.rabbitmq.com\/troubleshooting-ssl.html), Apple documentation has a note on [self-signed CAs and how to make them trusted](https:\/\/developer.apple.com\/library\/archive\/qa\/qa1948\/_index.html) on a given device. ","issue_id":1660621637552,"origin_id":484187839,"user_origin_id":1090,"create_time":1555522349,"update_time":1555522419,"id":1666195320835,"updated_at":"2022-10-19T16:02:00.834000Z","created_at":"2022-10-19T16:02:00.834000Z"}] comment

This client currently [supports leaf client certificate/key pairs](https://github.com/rabbitmq/rabbitmq-objc-client/blob/master/RMQClientIntegrationTests/TLSConnectionIntegrationTest.swift) but not certificate chains, both when parsing/providing to the server and performing [peer verification](https://www.rabbitmq.com/ssl.html#peer-verification).

effort-medium
help-wanted

Reimplement code generation in Swift

[{"_id":"635023dbcecf4e081a1914d3","body":"This looks useful: https:\/\/github.com\/cezheng\/Fuzi","issue_id":1660621637555,"origin_id":272447578,"user_origin_id":141733,"create_time":1484315588,"update_time":1484315588,"id":1666196443979,"updated_at":"2022-10-19T16:20:43.979000Z","created_at":"2022-10-19T16:20:43.979000Z"}] comment

Because people will get mad.

help-wanted

Provide predicates for connection and channel status

[{"_id":"635020198041c95dfb0e8d08","body":"I dodged this originally because the client has an async API. If all other operations are placed on a client-side queue, when would an application want to know if the client is connected - right now or after everything in the queue has been tried?\n\nIt might be a confusing experience for the developer if these concepts aren't expressed in the API. We could have both an async (with a block) and immediate predicate, perhaps?\n","issue_id":1660621637558,"origin_id":255963369,"user_origin_id":141733,"create_time":1477382077,"update_time":1477382077,"id":1666195481261,"updated_at":"2022-10-19T16:04:41.260000Z","created_at":"2022-10-19T16:04:41.260000Z"},{"_id":"635020198041c95dfb0e8d09","body":"One reason to check connection and channel state would be when you need to know if it's safe to [re-]publish a group of messages, e.g. to sync local mobile app state with that of the server. Note that it's not used to know when a connection succeeded.\n\nIn other clients it's a point-in-time predicate. I think this is what #97 is asking about.\n","issue_id":1660621637558,"origin_id":255965460,"user_origin_id":1090,"create_time":1477382645,"update_time":1477382645,"id":1666195481264,"updated_at":"2022-10-19T16:04:41.264000Z","created_at":"2022-10-19T16:04:41.264000Z"},{"_id":"635020198041c95dfb0e8d0a","body":"In that case it feels to me like you'd still want to use a block, because you'd probably want to avoid trying to re-send the messages if, by the time the local queue had been processed, your connection had dropped again.\n\nAnother thing to consider is the high likelihood of being in a connection recovery cycle on mobile. During recovery, none of these conditions are sufficient for knowing that it's safe to re-send:\n- the socket is connected\n- the AMQP connection is established\n- the channel is declared\n\nYou'd probably want to know that the entire topology had been redeclared before re-sending. Again, this doesn't seem to be covered in other clients, so maybe it isn't actually needed as much as I'm thinking.\n","issue_id":1660621637558,"origin_id":256035053,"user_origin_id":141733,"create_time":1477402286,"update_time":1477402286,"id":1666195481267,"updated_at":"2022-10-19T16:04:41.266000Z","created_at":"2022-10-19T16:04:41.266000Z"},{"_id":"635020198041c95dfb0e8d0b","body":"I'm still convinced that having a predicate for channels is a good idea and we will get requests for this again and again.\n","issue_id":1660621637558,"origin_id":256035657,"user_origin_id":1090,"create_time":1477402424,"update_time":1477402424,"id":1666195481269,"updated_at":"2022-10-19T16:04:41.269000Z","created_at":"2022-10-19T16:04:41.269000Z"},{"_id":"635020198041c95dfb0e8d0c","body":"I agree - but we should be careful about how it's implemented, or just how it's named, to avoid false \/ misleading return values.\n","issue_id":1660621637558,"origin_id":256052757,"user_origin_id":141733,"create_time":1477406105,"update_time":1477406105,"id":1666195481271,"updated_at":"2022-10-19T16:04:41.271000Z","created_at":"2022-10-19T16:04:41.271000Z"}] comment

Originally filed as #97. Java, .NET, Ruby (Bunny) all provide such predicates.

Use a generative testing library such as https://github.com/typelift/SwiftCheck to generate tests. Consider: - Varying quantities of data - Combinations of types being parsed - Field table types (at time of...

help-wanted

I've deliberately skipped this, as it was turning into a time sink. Please comment if you'd like to see it added i.e. you send decimals via message content headers.

Concurrent delivery consumption

[{"_id":"63502fddd297b621322d6399","body":"As long as per-channel ordering is guaranteed.\n\n> On 5 abr 2016, at 13:57, Andrew Bruce [email protected] wrote:\n> \n> Bunny does this using a thread pool. We could use dispatch queues in a similar way.\n> \n> \u2014\n> You are receiving this because you are subscribed to this thread.\n> Reply to this email directly or view it on GitHub\n","issue_id":1660621637569,"origin_id":205756979,"user_origin_id":1090,"create_time":1459854257,"update_time":1459854257,"id":1666199517024,"updated_at":"2022-10-19T17:11:57.024000Z","created_at":"2022-10-19T17:11:57.024000Z"}] comment

Bunny does this using a thread pool. We could use dispatch queues in a similar way. - [ ] Queue subscribe: blocks on completion of the entire pool of work