       @setupPorts (err) =>
         @running = true
         return callback err if err
-        @register (err) ->
-          return callback err
+        @register (err) =>
+          return callback err if err
+          period = @options.discoveryPeriod*1000/2.2 # try to send 2 messages before deadline
+          setTimeout () =>
+            @register (err) ->
+              console.log 'Could not send discovery message', err if err
+          , period
+          return callback null
 
   stop: (callback) ->
     @running = false


class Participant extends EventEmitter
  # @func gets called with inport, , and should return outport, outdata
  constructor: (client, def, @func, role) ->
    client = transport.getClient(client) if typeof client == 'string'
    @messaging = client
    role = 'unknown' if not role

    @running = false
    newrelic = require './newrelic'
    @_transactions = new newrelic.Transactions @definition
    @options = options
    @options.discoveryPeriod = 60 if not @options.discoveryPeriod # seconds

  start: (callback) ->
    @messaging.connect (err) =>
