corda / net.corda.node.services.messaging

## Package net.corda.node.services.messaging

### Types

ArtemisMessagingComponent | `abstract class ArtemisMessagingComponent : SingletonSerializeAsToken` The base class for Artemis services that defines shared data structures and SSL transport configuration.
ArtemisMessagingServer | `class ArtemisMessagingServer : ArtemisMessagingComponent` This class configures and manages an Apache Artemis message queue broker.
ClassSerializer | `object ClassSerializer : Serializer<Class<*>>`
ClientRPCRequestMessage | `data class ClientRPCRequestMessage` The contents of an RPC request message, separated from the MQ layer.
CordaRPCClient | `class CordaRPCClient : Closeable, ArtemisMessagingComponent` An RPC client connects to the specified server and allows you to make calls to the server that perform various useful tasks. See the documentation for proxy or review the docsite to learn more about how this API works.
CordaRPCClientImpl | `class CordaRPCClientImpl` Core RPC engine implementation, to learn how to use RPC you should be looking at CordaRPCClient.
MarshalledObservation | `data class MarshalledObservation` Used in the RPC wire protocol to wrap an observation with the handle of the observable it's intended for.
NodeLoginModule | `class NodeLoginModule : LoginModule` Clients must connect to us with a username and password and must use TLS. If a someone connects with ArtemisMessagingComponent.NODE_USER then we confirm it's just us as the node by checking their TLS certificate is the same as our one in our key store. Then they're given full access to all valid queues. If they connect with ArtemisMessagingComponent.PEER_USER then we confirm they belong on our P2P network by checking their root CA is the same as our root CA. If that's the case the only access they're given is the ablility send to our P2P address. In both cases the messages these authenticated nodes send to us are tagged with their subject DN and we assume the CN within that is their legal name. Otherwise if the username is neither of the above we assume it's an RPC user and authenticate against our list of valid RPC users. RPC clients are given permission to perform RPC and nothing else.
NodeMessagingClient | `class NodeMessagingClient : ArtemisMessagingComponent, MessagingServiceInternal` This class implements the MessagingService API using Apache Artemis, the successor to their ActiveMQ product. Artemis is a message queue broker and here we run a client connecting to the specified broker instance ArtemisMessagingServer. It's primarily concerned with peer-to-peer messaging.
RPCDispatcher | `abstract class RPCDispatcher` Intended to service transient clients only (not p2p nodes) for short-lived, transient request/response pairs. If you need robustness, this is the wrong system. If you don't want a response, this is probably the wrong system (you could just send a message). If you want complex customisation of how requests/responses are handled, this is probably the wrong system.
VerifyingNettyConnectorFactory | `class VerifyingNettyConnectorFactory : NettyConnectorFactory`

### Annotations

RPCSinceVersion | `annotation class RPCSinceVersion` Records the protocol version in which this RPC was added.

### Exceptions

PermissionException | `class PermissionException : RuntimeException`
RPCException | `open class RPCException : RuntimeException` Thrown to indicate a fatal error in the RPC system itself, as opposed to an error generated by the invoked method.

### Properties

CURRENT_RPC_USER | `val CURRENT_RPC_USER: ThreadLocal<User>` This is available to RPC implementations to query the validated User that is calling it. Each user has a set of permissions they're entitled to which can be used to control access.
rpcLog | `val rpcLog: Logger` Global RPC logger

### Functions

createRPCKryo | `fun createRPCKryo(observableSerializer: Serializer<Observable<Any>>? = null): Kryo`
requirePermission | `fun requirePermission(permission: String): Unit` Helper method which checks that the current RPC user is entitled for the given permission. Throws a PermissionException otherwise.