# Class: AMQPClient

## AMQPClient

#### new AMQPClient(policyopt, policyOverridesopt)

AMQPClient is the top-level class for interacting with node-amqp10. Instantiate this class, connect, and then send/receive
as needed and behind the scenes it will do the appropriate work to setup and teardown connections, sessions, and links and manage flow.
The code does its best to avoid exposing AMQP-specific types and attempts to convert them where possible, but on the off-chance you
need to speak AMQP-specific (e.g. to set a filter to a described-type), you can use node-amqp-encoder and the
translator adapter to convert it to our internal types. See simple_eventhub_test.js for an example.

Configuring AMQPClient is done through a Policy class. By default, DefaultPolicy will be used - it assumes AMQP defaults wherever
possible, and for values with no spec-defined defaults it tries to assume something reasonable (e.g. timeout, max message size).

To define a new policy, you can merge your values into an existing one by calling AMQPClient.policies.merge(yourPolicy, existingPolicy).
This does a deep-merge, allowing you to only replace values you need. For instance, if you wanted the default sender settle policy to be auto-settle instead of mixed,
you could just use

     var AMQP = require('amqp10');
     var client = new AMQP.Client(AMQP.Policy.merge({
       senderLink: {
         attach: {
           senderSettleMode: AMQP.Constants.senderSettleMode.settled
         }
       }
     });

Obviously, setting some of these options requires some in-depth knowledge of AMQP, so I've tried to define specific policies where I can.
For instance, for Azure EventHub connections, you can use the pre-build EventHubPolicy.

Also, within the policy, see the encoder and decoder defined in the send/receive policies. These define what to do with the message
sent/received, and by default do a simple pass-through, leaving the encoding to/decoding from AMQP-specific types up to the library which
does a best-effort job. See EventHubPolicy for a more complicated example, turning objects into UTF8-encoded buffers of JSON-strings.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`policy` | Policy | <optional> | Policy to use for connection, sessions, links, etc. Defaults to DefaultPolicy.
`policyOverrides` | Obeject | <optional> | Additional overrides for the provided policy

##### Fires:

- AMQPClient#client:errorReceived
- AMQPClient#connection:opened
- AMQPClient#connection:closed

### Extends

- EventEmitter

### Methods

#### connect(url, policyOverridesopt) → {Promise}

Connects to a given AMQP server endpoint. Sets the default queue, so e.g.
amqp://my-activemq-host/my-queue-name would set the default queue to
my-queue-name for future send/receive calls.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`url` | string |  | URI to connect to - right now only supports `amqp|amqps` as protocol.
`policyOverrides` | object | <optional> | Policy overrides used for creating this connection

##### Returns:

Type
  Promise

#### createReceiver(address, policyOverridesopt) → {Promise.<ReceiverLink>}

Creates a receiver link for the given address, with optional link policy. The
promise returned resolves to a link that is an EventEmitter, which can be
used to listen for 'message' events.

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`address` | string |  | An address to connect this link to. If not provided will use default queue from connection uri.
`policyOverrides` | object | <optional> | Policy overrides used for creating this receiver link ###### Properties
Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | Explicitly set a name for this link, this is an alias to [policyOverrides.attach.name]

##### Returns:

Type
  Promise.<ReceiverLink>

#### createReceiverStream(address, policyOverridesopt) → {Promise.<ReceiverStream>}

Creates a receiver link wrapped as a Readable stream

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`address` | string |  | Address used for link creation
`policyOverrides` | object | <optional> | Policy overrides used for creating the receiver link

##### Returns:

Type
  Promise.<ReceiverStream>

#### createSender(address, policyOverridesopt) → {Promise.<SenderLink>}

Creates a sender link for the given address, with optional link policy

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`address` | string |  | An address to connect this link to. If not provided will use default queue from connection uri.
`policyOverrides` | object | <optional> | Policy overrides used for creating this sender link ###### Properties
Name | Type | Attributes | Description
--- | --- | --- | ---
`name` | string | <optional> | Explicitly set a name for this link, this is an alias to [policyOverrides.attach.name]

##### Returns:

Type
  Promise.<SenderLink>

#### createSenderStream(address, policyOverridesopt) → {Promise.<SenderStream>}

Creates a sender link wrapped as a Writable stream

##### Parameters:

Name | Type | Attributes | Description
--- | --- | --- | ---
`address` | string |  | Address used for link creation
`policyOverrides` | object | <optional> | Policy overrides used for creating this sender link

##### Returns:

Type
  Promise.<SenderStream>

#### disconnect() → {Promise}

Disconnect tears down any existing connection with appropriate Close
performatives and TCP socket teardowns.

##### Returns:

Type
  Promise

### Events

#### client:errorReceived

Error received events

##### Type:

- object

##### Properties:

Name | Type | Description
--- | --- | ---
`the` | object | error received

#### connection:closed

Connection closed event.

#### connection:opened

Connection opened event.