func (r *Runner) Start() error {
	if r.stopped {
		return errors.New("Cannot restart a runner.")
	}

	numRoutes := r.job.EndRange - r.job.StartRange
	rangeSize := numRoutes / r.numGoRoutines
	ranges := PartitionRange(r.job.StartRange, r.job.EndRange, rangeSize)

	for i := 0; i < r.numGoRoutines; i += 1 {
		r.wg.Add(1)
		go func(id int) {
			defer r.wg.Done()

			job := r.job
			job.StartRange = ranges[id]
			job.EndRange = ranges[id+1]
			p := publisher.NewPublisher(job)
			err := p.Initialize(r.cc)
			if err != nil {
				r.errsChan <- fmt.Errorf("initializing connection: %s", err)
				r.Stop()
				return
			}
			err = p.PublishRouteRegistrations()
			if err != nil {
				r.errsChan <- fmt.Errorf("publishing: %s", err)
				r.Stop()
				return
			}
			for {
				select {
				case <-time.After(r.heartbeatInterval):
					err := p.PublishRouteRegistrations()
					if err != nil {
						r.errsChan <- fmt.Errorf("publishing: %s", err)
						r.Stop()
						return
					}
				case <-r.quitChan:
					// Exit upon closed quit channel
					return
				}
			}
		}(i)
	}

	return nil
}
	validJob := publisher.Job{
		PublishingEndpoint: "pub.end.point",

		BackendHost: "1.2.3.4",
		BackendPort: 1234,

		AppDomain:  "apps.com",
		AppName:    "some-app",
		StartRange: 500,
		EndRange:   505,
	}
	Describe("Initialize", func() {
		It("errors if validation of the job properties fails", func() {
			w := publisher.NewPublisher(publisher.Job{
				PublishingEndpoint: "endpoint",
				BackendHost:        "1.2.3.4",
				BackendPort:        1234,
			})
			createConnection := func(endpoint string) (publisher.PublishingConnection, error) {
				return nil, nil
			}
			err := w.Initialize(createConnection)
			Expect(err).To(HaveOccurred())
			Expect(err).To(MatchError(`Invalid job properties: Missing "AppDomain"`))
		})

		It("errors if the creation of a connection fails", func() {
			w := publisher.NewPublisher(validJob)
			createConnection := func(endpoint string) (publisher.PublishingConnection, error) {
				return nil, errors.New("Unable to create connection")
			}